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

393 Commits

Author SHA1 Message Date
github-actions[bot]
4c84da9404 flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/96e078c646b711aee04b82ba01aefbff87004ded?narHash=sha256-bHCFgGeu8XjWlVuaWzi3QONjDW3coZDqSHvnd4l7xus%3D' (2025-04-26)
  → 'github:ryantm/agenix/4835b1dc898959d8547a871ef484930675cb47f1?narHash=sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY%2BD81k%3D' (2025-05-18)
• Updated input 'home-manager':
    'github:nix-community/home-manager/50eee705bbdbac942074a8c120e8194185633675?narHash=sha256-EyXUNSa%2BH%2BYvGVuQJP1nZskXAowxKYp79RNUsNdQTj4%3D' (2025-05-02)
  → 'github:nix-community/home-manager/d5f1f641b289553927b3801580598d200a501863?narHash=sha256-ypL9WAZfmJr5V70jEVzqGjjQzF0uCkz%2BAFQF7n9NmNc%3D' (2025-05-19)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/1d3aeb5a193b9ff13f63f4d9cc169fb88129f860?narHash=sha256-QkNoyEf6TbaTW5UZYX0OkwIJ/ZMeKSSoOMnSDPQuol0%3D' (2025-05-06)
  → 'github:NixOS/nixpkgs/2baa12ff69913392faf0ace833bc54bba297ea95?narHash=sha256-U4HaNZ1W26cbOVm0Eb5OdGSnfQVWQKbLSPrSSa78KC0%3D' (2025-05-21)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/0bb671aaa84205c180ec9122d9aa2f5823b7b2aa?narHash=sha256-JtzH3pV0oqlR9lTccOU5SbAY8PzbEp2lyXKlD/DGdRQ%3D' (2025-05-10)
  → 'github:NixOS/nixpkgs/81e63461fb905af981fcb99057a845a930999eaa?narHash=sha256-p4cM3XaeN7YLMw4dSRCIZwXPxOS1SelqxPBUNs0IF6A%3D' (2025-05-25)
• Updated input 'nur':
    'github:nix-community/NUR/887e5be213778cb047379434b6bb41ad09d9c8db?narHash=sha256-%2BU1n00EyLKzvZlMHK/YGS6OGIYsKfaz4j1qydyyrIRk%3D' (2025-05-10)
  → 'github:nix-community/NUR/d8bccb87461726979bc4fe9facbdfa0739fe24a2?narHash=sha256-AWYa6QSgYbd0YiOecaTyJ78XSHcLI7yljdSpBTQWB%2B8%3D' (2025-05-24)
• Updated input 'nur/nixpkgs':
    'github:nixos/nixpkgs/dda3dcd3fe03e991015e9a74b22d35950f264a54?narHash=sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ%2BTCkTRpRc%3D' (2025-05-08)
  → 'github:nixos/nixpkgs/063f43f2dbdef86376cc29ad646c45c46e93234c?narHash=sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o%3D' (2025-05-23)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/be092436d4c0c303b654e4007453b69c0e33009e?narHash=sha256-GcUWDQUDRYrD34ol90KGUpjbVcOfUNbv0s955jPecko%3D' (2025-05-10)
  → 'github:oxalica/rust-overlay/2221d8d53c128beb69346fa3ab36da3f19bb1691?narHash=sha256-rwFiLLNCwkj9bqePtH1sMqzs1xmohE0Ojq249piMzF4%3D' (2025-05-24)
• Updated input 'stockholm':
    'github:krebs/stockholm/8d0538bf86e4f9df4f5cc358a1760b255be797e9?narHash=sha256-tQZ8sXCU6yvC0ut/%2BezRUSd89Nbyqqn0JVCjYDwcqQA%3D' (2025-02-11)
  → 'github:krebs/stockholm/d4abc837cc7b87b4f23fe48cc306df26e3de7aab?narHash=sha256-i2s6jU%2B8GLKVjhWDyvFYxmXI7A44c9p6apPPyKt0ETk%3D' (2025-05-13)
• Updated input 'stockholm/buildbot-nix':
    'github:Mic92/buildbot-nix/c077f430f3717d41bb303d031398058665315166?narHash=sha256-T9THCbnlj4CkKbTP%2BlisA5PUMoTXE7uh4FyDQzui%2Bdc%3D' (2025-01-26)
  → 'github:Mic92/buildbot-nix/7ad9b4886eccb5eecc0686a16266ddabf6cbefe9?narHash=sha256-mRnIdJLP%2B0NSim9ao30ue0Z3ttSuxzXwQG7UN1KuKfU%3D' (2025-05-07)
• Updated input 'stockholm/buildbot-nix/flake-parts':
    'github:hercules-ci/flake-parts/b905f6fc23a9051a6e1b741e1438dbfc0634c6de?narHash=sha256-%2Bhu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU%3D' (2025-01-06)
  → 'github:hercules-ci/flake-parts/c621e8422220273271f52058f618c94e405bb0f5?narHash=sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY%3D' (2025-04-01)
• Updated input 'stockholm/buildbot-nix/hercules-ci-effects':
    'github:hercules-ci/hercules-ci-effects/afd0a42e8c61ebb56899315ee4084a8b2e4ff425?narHash=sha256-JTBWmyGf8K1Rwb%2BgviHIUzRJk/sITtT%2B72HXFkTZUjo%3D' (2025-01-15)
  → 'github:hercules-ci/hercules-ci-effects/5b6cec51c9ec095a0d3fd4c8eeb53eb5c59ae33e?narHash=sha256-1Z4WPGVky4w3lrhrgs89OKsLzPdtkbi1bPLNFWsoLfY%3D' (2025-04-15)
• Updated input 'stockholm/buildbot-nix/treefmt-nix':
    'github:numtide/treefmt-nix/f2cc121df15418d028a59c9737d38e3a90fbaf8f?narHash=sha256-5An1wq5U8sNycOBBg3nsDDgpwBmR9liOpDGlhliA6Xo%3D' (2025-01-21)
  → 'github:numtide/treefmt-nix/29ec5026372e0dec56f890e50dbe4f45930320fd?narHash=sha256-4h3s1L/kKqt3gMDcVfN8/4v2jqHrgLIe4qok4ApH5x4%3D' (2025-05-02)
• Updated input 'stockholm/nixpkgs':
    'github:NixOS/nixpkgs/852ff1d9e153d8875a83602e03fdef8a63f0ecf8?narHash=sha256-Zf0hSrtzaM1DEz8//%2BXs51k/wdSajticVrATqDrfQjg%3D' (2025-01-26)
  → 'github:NixOS/nixpkgs/d89fc19e405cb2d55ce7cc114356846a0ee5e956?narHash=sha256-3e%2BAVBczosP5dCLQmMoMEogM57gmZ2qrVSrmq9aResQ%3D' (2025-05-10)
• Updated input 'stylix':
    'github:danth/stylix/20ace60f9cb5e179cb2256abaee505780df8e804?narHash=sha256-O8rZjqJUIkUva66XTOZy0wcgfBP2eaxU9%2BXt7ZHtfhI%3D' (2025-05-01)
  → 'github:danth/stylix/66f554e4e32d804bcf2c007a7b7efef04a3773b0?narHash=sha256-DYdmj22ZvkN5x9/VtdV5Wnze%2BUaPuboYraCPnOWn6u4%3D' (2025-05-20)
2025-05-25 01:10:26 +00:00
ddd759a838 ssh: kibbeh -> kabsa 2025-05-21 10:51:05 +02:00
5244ae3850 fu-vpn: include xauthority setup 2025-05-21 10:50:38 +02:00
b90aa5ef07 fu-vpn: use sudo 2025-05-21 10:46:43 +02:00
d52c10bc84 format 2025-05-21 10:46:32 +02:00
a6bc317141 i3status-rust: display all batteries with remaining time 2025-05-21 10:46:18 +02:00
d4ee3cf692 heavily simplify dashboard 2025-05-21 10:45:45 +02:00
c96ac804df reinstate kabsa 2025-05-21 07:43:52 +02:00
4af218f7ad radio-news: send earlier 2025-05-16 14:03:42 +02:00
b08576c972 radio-news: expire earlier 2025-05-16 10:08:30 +02:00
44cb0bf8a5 remock secrets 2025-05-14 16:39:04 +02:00
4c9305c89d init brainmelter 2025-05-14 06:57:06 +02:00
8c838966f2 radio news: automatically post digest 2025-05-13 20:22:42 +02:00
6ffb80322b radio news digest 2025-05-13 19:51:43 +02:00
6e1bbb878a update 2025-05-10 22:08:32 +02:00
4a1abf06f6 pls: more musical criticism 2025-05-07 10:54:17 +02:00
e9a6a482ee install packages for photography 2025-05-07 09:14:53 +02:00
3bdf539540 neovim: set colorscheme light 2025-04-28 13:17:38 +02:00
f053f6292d update 2025-04-28 13:10:56 +02:00
e350eac5c7 librsvg 2025-04-28 11:00:09 +02:00
046f2ca75d systemd-tmpfiles-clean: enable for user 2025-04-15 14:22:28 +02:00
6fcba6dc75 ssh: kabsa -> kibbeh 2025-03-31 10:20:09 +02:00
3750b6c131 update 2025-03-30 22:35:46 +02:00
4046339f5b get ready for VPNing to germany 2025-03-21 09:07:43 +01:00
da224a0e4b stylix: spring has begun 2025-03-21 09:07:29 +01:00
60a73a81be ssh: add travel laptop public key 2025-03-16 08:56:18 +01:00
889eb1d5c2 yta: download best quality opus 2025-03-16 08:56:07 +01:00
github-actions[bot]
e34b3e02b3 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/1546c45c538633ae40b93e2d14e0bb6fd8f13347?narHash=sha256-F0qDu2egq18M3edJwEOAE%2BD%2BVQ%2ByESK6YWPRQBfOqq8%3D' (2025-03-02)
  → 'github:NixOS/nixpkgs/cdd2ef009676ac92b715ff26630164bb88fec4e0?narHash=sha256-prZ0M8vE/ghRGGZcflvxCu40ObKaB%2Bikn74/xQoNrGQ%3D' (2025-03-13)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/4f8cf457154521f90d60ed0b785774a728842875?narHash=sha256-ADrsBEvcCGQEZWrkmUES6PpoqSKXVlrHhteHT6Sbr2o%3D' (2025-03-04)
  → 'github:NixOS/nixpkgs/1a4711b6be669d31f21b417a7f8b60801367dfee?narHash=sha256-03bPiYMWpguzc4JwAGoD7j2GEi1K2k9wrNbfoaFrYg4%3D' (2025-03-16)
• Updated input 'nur':
    'github:nix-community/NUR/8cf34376717c39b3f8ed2d28091ff2a2455b3ab8?narHash=sha256-SN5pa746g3yeOBaouHZU1RCS2ZtUFKWpZtDG86xgSig%3D' (2025-03-04)
  → 'github:nix-community/NUR/cbd6b0ec3da4afb2e45f3275af8cb9f1dc718534?narHash=sha256-ylgdokg/pY5a2GPddDGGNR8MA0MOYStuxjwn8AnPDbk%3D' (2025-03-15)
• Updated input 'nur/nixpkgs':
    'github:nixos/nixpkgs/ba487dbc9d04e0634c64e3b1f0d25839a0a68246?narHash=sha256-WZNlK/KX7Sni0RyqLSqLPbK8k08Kq7H7RijPJbq9KHM%3D' (2025-03-03)
  → 'github:nixos/nixpkgs/6607cf789e541e7873d40d3a8f7815ea92204f32?narHash=sha256-cPfs8qMccim2RBgtKGF%2Bx9IBCduRvd/N5F4nYpU0TVE%3D' (2025-03-13)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/aefb7017d710f150970299685e8d8b549d653649?narHash=sha256-52vwEV0oS2lCnx3c/alOFGglujZTLmObit7K8VblnS8%3D' (2025-03-04)
  → 'github:oxalica/rust-overlay/028cd247a6375f83b94adc33d83676480fc9c294?narHash=sha256-6wuOGWkyW6R4A6Th9NMi6WK2jjddvZt7V2%2BrLPk6L3o%3D' (2025-03-15)
• Updated input 'stylix':
    'github:danth/stylix/aaa2eb8956770c096f9c46fb163bb26602e20e56?narHash=sha256-QRlcA8rtfNdyKpBE%2BptjiB9717Tzum4/sKBSbsyqL6k%3D' (2025-02-25)
  → 'github:danth/stylix/9bfc74f330ead111e8ea354b2220a431b0cfaa26?narHash=sha256-utsgC6H3ja6sLAXMd8//I2D7yjyScFqVDRX0wpbqPZo%3D' (2025-03-14)
• Updated input 'stylix/firefox-gnome-theme':
    'github:rafaelmardojai/firefox-gnome-theme/a89108e6272426f4eddd93ba17d0ea101c34fb21?narHash=sha256-vAxN2f3rvl5q62gQQjZGVSvF93nAsOxntuFz%2Be/655w%3D' (2025-02-10)
  → 'github:rafaelmardojai/firefox-gnome-theme/5a81d390bb64afd4e81221749ec4bffcbeb5fa80?narHash=sha256-RsvHGNTmO2e/eVfgYK7g%2BeYEdwwh7SbZa%2BgZkT24MEA%3D' (2025-03-10)
• Updated input 'stylix/git-hooks':
    'github:cachix/git-hooks.nix/9364dc02281ce2d37a1f55b6e51f7c0f65a75f17?narHash=sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg%3D' (2025-01-21)
  → 'github:cachix/git-hooks.nix/b5a62751225b2f62ff3147d0a334055ebadcd5cc?narHash=sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc%3D' (2025-03-07)
• Updated input 'stylix/tinted-tmux':
    'github:tinted-theming/tinted-tmux/b6c7f46c8718cc484f2db8b485b06e2a98304cd0?narHash=sha256-/etfUV3HzAaLW3RSJVwUaW8ULbMn3v6wbTlXSKbcoWQ%3D' (2025-02-23)
  → 'github:tinted-theming/tinted-tmux/d48ee86394cbe45b112ba23ab63e33656090edb4?narHash=sha256-zWcCXgdC4/owfH/eEXx26y5BLzTrefjtSLFHWVD5KxU%3D' (2025-03-02)
• Updated input 'voidrice':
    'github:Lukesmithxyz/voidrice/59632a5668f1af956ec325f8d8455d312727b8a8?narHash=sha256-y80KJjdbvko53yK6AvxVrmU/yYnyYQxTT6FZOXhCDVk%3D' (2025-03-02)
  → 'github:Lukesmithxyz/voidrice/5f385da9f686ffb9ab61c194a46539cbe53357ea?narHash=sha256-ZoEyircvifmAH7QqDpdDxhaHMdAfWtjZB6JiSvMBRVg%3D' (2025-03-09)
2025-03-16 01:03:16 +00:00
d7f01e0a5e manakish: switch to network manager 2025-03-05 14:28:05 +01:00
6ea3629f77 mycelium: add manakish 2025-03-05 14:27:51 +01:00
b010f7e7cc kibbeh: unify locale 2025-03-05 10:05:13 +01:00
0b60f953b7 mycelium host aliases for all 2025-03-05 10:05:13 +01:00
d64ce2036a ci: apt-get update 2025-03-05 10:05:13 +01:00
ebe3997beb init mycelium 2025-03-05 10:05:13 +01:00
1b23814dc3 update 2025-03-04 20:37:09 +01:00
df35d1d935 flake: change retiolum to stockholm mirror 2025-02-26 10:13:28 +01:00
b01c289a26 kibbeh: install tmux 2025-02-26 10:06:44 +01:00
dafa3229bb kibbeh: install telegram 2025-02-13 19:14:55 +01:00
dee784472f mock secrets 2025-02-11 21:18:14 +01:00
295f8257e3 kibbeh: configure 2025-02-11 21:04:02 +01:00
5adc8309f2 init kibbeh (ex-kabsa) 2025-02-11 15:51:06 +01:00
cd58ea209e fonts+keyboards: add syriac 2025-02-10 11:35:38 +01:00
0ae493a0f5 nil: add nixfmt as formatter 2025-02-07 15:45:51 +01:00
c0f6fc1121 aerc: add letos, remove fysi, fix cock 2025-02-07 13:02:01 +01:00
dc519dc055 stylix: unify code 2025-02-01 14:42:21 +01:00
4d178f7bb8 weechat: clean up brockman channels 2025-01-27 22:52:51 +01:00
c0ba0e605a update 2025-01-27 22:52:41 +01:00
4620390411 browser: install tor browser 2025-01-23 07:38:44 +01:00
a18e295a9e unify color scheme 2025-01-21 16:19:28 +01:00
f3ae88c6d1 monitor zodiac.fly.dev api 2025-01-20 13:04:23 +01:00
d08ed06bc5 zoom 2025-01-20 13:04:11 +01:00
b648661e60 bluetooth: replace by bluetuith 2025-01-20 13:04:01 +01:00
b26b48034c prometheus: monitor brockman.news 2025-01-06 22:29:58 +01:00
6acfa2927c brockman: remove 2024-12-31 15:05:14 +01:00
914a464e4f fonts: fix hash 2024-12-31 14:03:36 +01:00
505031d103 weechat: add brockman 2024-12-31 14:03:23 +01:00
b5927a5217 klem: update paste scripts to use 4d2.org, remove ix.io (which is offline) 2024-12-29 11:45:19 +01:00
5c87fd6cd4 celan: use tei edition 2024-12-16 17:17:43 +01:00
dbb5fe131e tlg-wotd: work around until cltk works with 3.12
https://github.com/NixOS/nixpkgs/pull/353367
2024-12-16 13:20:25 +01:00
89cd81b2f4 cltk: move to nixpkgs 2024-12-16 13:20:01 +01:00
2c58405314 gpg-agent: use qt pinentry (rofi does not work) 2024-12-16 10:55:35 +01:00
ffe9f90b4e alew: fix 2024-12-13 13:42:51 +01:00
f8c3a9dbef neovim: use bas16 manually 2024-12-13 13:42:39 +01:00
2c6007d404 upgrade to 24.11 2024-12-13 13:42:16 +01:00
3253a217d7 bye bye hu 2024-12-10 13:04:44 +01:00
7c67964ea8 streams: add ancient fm 2024-12-10 12:37:20 +01:00
b42ea3d7b6 update 2024-12-02 13:12:38 +01:00
eb2179c0ad nextcloud: update and backup correctly 2024-12-02 13:12:24 +01:00
61ec35a29b bots: run tlg wotd on social.krebsco.de 2024-11-26 21:27:02 +01:00
56e44e94e0 alertmanager: add social.krebsco.de 2024-11-26 21:17:41 +01:00
ee24ef7340 alew: init on ful 2024-11-15 09:48:11 +01:00
a1a0a517a2 readd secrets 2024-11-13 16:32:05 +01:00
265a697136 remove secrets 2024-11-13 16:30:16 +01:00
6e53b32f5d move to social.krebsco.de mastodon 2024-11-13 14:03:56 +01:00
af6553abf6 backup: electrum wallets 2024-11-13 06:13:40 +01:00
d22682519b nextcloud: config -> settings 2024-11-09 16:57:16 +01:00
b2065c4155 nas: add sd-card to shared storage 2024-11-09 16:55:39 +01:00
63f5db1c58 alertmanager: summary -> description 2024-11-09 16:55:14 +01:00
f3a5e0a54c neovim: move lsp to config file, add xml lsp 2024-11-09 15:38:21 +01:00
136000540b zaatar: add nas share 2024-11-05 09:09:45 +01:00
762d766db5 keyboards: add urdu keyboard 2024-10-27 15:45:18 +01:00
812c795723 deno: use newest version 2024-10-27 15:45:07 +01:00
cf72c1df1f alertmanager: more alerts? 2024-10-27 15:44:52 +01:00
05b35bd9f0 chore: update 2024-10-27 15:44:39 +01:00
4eb7c46286 gimp: bring out 2024-10-25 21:09:31 +02:00
b42945ac7d panoptikon: do not report on IRC 2024-10-25 06:58:13 +02:00
ea4d334d10 aider: bye 2024-10-24 07:34:11 +02:00
dd1bc890bd monopolize on deno 2024-10-23 07:56:38 +02:00
f9fe700f68 magic-wormhole 2024-10-23 07:54:26 +02:00
a0b7362fc5 fix-sd: recheck after cleanup 2024-10-23 07:54:18 +02:00
e7a77fbfb5 fu-berlin: they changed their vpn 2024-10-23 07:53:53 +02:00
7d38f3a718 bots: program nietzschebot 2024-10-11 14:37:01 +02:00
70dde17e88 htmlq: remove
it is shitty python software
2024-10-11 14:37:01 +02:00
5f11a95d32 transits: do not post natal transits 2024-10-09 10:12:59 +02:00
d78e738f51 alertmanager: report on matrix 2024-10-09 00:01:39 +02:00
c9770d065a radio: deactivate wikipedia and lyrikline 2024-10-08 22:54:20 +02:00
f42d1ebf28 movk secrets 2024-10-08 22:54:04 +02:00
f6621a5bb9 panoptikon: send news on matrix 2024-10-08 22:36:14 +02:00
136d4e699f bots: post on matrix as well 2024-10-08 22:35:41 +02:00
a28fca11a7 rename bot structure 2024-10-08 19:33:01 +02:00
e26b8408f6 smyth: post url 2024-10-08 18:49:34 +02:00
69d1fd44f8 literature-quote: improve formatting 2024-10-08 18:49:34 +02:00
677aefbe73 hesychius: also post on mastodon 2024-10-08 18:49:34 +02:00
e2f784ed3b smyth: also post on mastodon 2024-10-08 18:49:34 +02:00
ac3758e027 bots: post on mastodon as well 2024-10-08 18:49:33 +02:00
f43e4ff664 mock secrets 2024-10-07 23:22:41 +02:00
c15e9812c4 gnupg: use nixos instead of home-manager 2024-10-07 22:58:55 +02:00
a2390d52c5 literature-quote: also post on mastodon 2024-10-07 22:58:33 +02:00
7ee17cb5b8 transits: do not post personalized transits 2024-10-07 07:26:23 +02:00
f535ba7b2a mock secrets 2024-10-05 15:22:26 +02:00
48d10b25ee autorenkalender: also post on mastodon 2024-10-05 15:22:13 +02:00
ccd8d63d8d hesychius: also post on mastodon 2024-10-05 15:13:57 +02:00
519a1079bc smyth: also post on mastodon 2024-10-05 15:09:11 +02:00
84fa3ee4b6 transits: also post on mastodon 2024-10-05 15:03:35 +02:00
4774a0ec0f fix-sd: backup corrupt files to pwd 2024-10-05 14:53:59 +02:00
5ba3dfc451 bots: post on mastodon as well 2024-10-05 14:42:44 +02:00
729f1180b7 tlg-wotd: also post on mastodon 2024-10-04 17:07:06 +02:00
1e74d0470c chore: update 2024-10-01 22:28:15 +02:00
c1b58f7038 wireguard: no autostart 2024-10-01 22:28:04 +02:00
904cc4401e weechat: use relay instead of API 2024-10-01 21:03:33 +02:00
7e033412bd add sd card fixer 2024-09-25 22:14:38 +02:00
3bdf71425b fritzbox VPN 2024-09-23 19:34:59 +02:00
2067944151 tlg-wotd: use cltk for transcription 2024-09-22 17:33:04 +02:00
c34708b989 cltk: init at 1.3.0 2024-09-22 17:32:49 +02:00
a07b871bbb unicodmenu: create cache 2024-09-22 00:37:30 +02:00
9b0b4ca08c tlg-wotd: generate fance image
big thanks to @soerface
2024-09-22 00:27:51 +02:00
09c631b4e5 noise generators 2024-09-19 09:54:12 +02:00
c246310cab noise-waves 2024-09-18 09:20:26 +02:00
fef3a1fbff update 2024-09-15 20:58:17 +02:00
dacf34ebc0 scrabble: host without containers 2024-09-15 20:58:01 +02:00
4b96e82d25 add another web radio stream 2024-09-15 19:39:46 +02:00
967c5f32c7 nextcloud: reenable onlyoffice 2024-09-11 10:17:46 +02:00
18c5a087f3 aider 2024-09-08 20:35:53 +02:00
f40ce68ced XCompose: add aspirates/fricatives 2024-09-08 19:14:47 +02:00
bfa2b1e9b1 makanek: host online scrabble 2024-09-08 19:14:30 +02:00
6908b75571 brockman: backup 2024-08-17 14:52:13 +02:00
ce7fd6074b miniflux: add random unread script 2024-08-14 06:40:51 +02:00
297b3aba37 ful: host brockman 2024-08-14 06:40:24 +02:00
228d93f399 i3: fix unfocused borders 2024-07-29 08:01:44 +02:00
6364aa446a rust-overlay needs no flake-utils 2024-07-25 20:15:37 +02:00
b5c5be02db update 2024-07-25 20:15:37 +02:00
0bfabd8226 stylix: fix by enabling explicitly 2024-07-25 20:15:37 +02:00
c70e877b42 lemmeknow, aichat 2024-07-23 20:18:53 +02:00
4f1fc0bea5 streams: add some more 2024-07-11 16:07:49 +02:00
a664bfbe1b reinstate zaatar 2024-07-11 16:07:39 +02:00
a744ed593b home-assistant: enable bluetooth 2024-07-10 12:57:19 +02:00
c9a83021a9 ful: host openapi test server 2024-07-10 12:57:07 +02:00
bea8f8c150 chore: update 2024-07-10 12:56:55 +02:00
c1bdb5e422 i3: delay unicode paste 2024-07-10 10:39:45 +02:00
6e82ef3b5a move back to zaatar 2024-07-10 10:27:30 +02:00
6d16b93530 zaatar died, move hass and restic to tahina 2024-07-07 14:03:52 +02:00
9f6d1c3dc6 streams: update lassulus radio 2024-07-02 09:05:38 +02:00
aca55b4045 ful: run servant openapi server that does nothing 2024-07-01 10:17:58 +02:00
c23935afe6 Revert "streams: render out for transistor webradio app"
This reverts commit 88af7bdcc0.
2024-06-26 19:36:51 +02:00
88af7bdcc0 streams: render out for transistor webradio app 2024-06-26 19:36:45 +02:00
838a61c698 unicodmenu: add buggy script to type last-copied character 2024-06-26 19:35:32 +02:00
5a9dc34ee8 weechat: use new api relay 2024-06-26 19:35:05 +02:00
b21c6adccc tahina, tabula: update 2024-06-20 15:06:00 +02:00
73ef0aafdc keyboard: add gujarati and refactor 2024-06-20 15:05:40 +02:00
9026d6d281 fonts: apparently junicode 2 has been released 2024-06-17 11:55:10 +02:00
7c193ba043 dashboard: add battery status 2024-06-17 11:54:21 +02:00
b72a387b97 fonts: add brill font 2024-06-17 11:54:04 +02:00
7e56757597 streams: fix FRK description 2024-06-09 22:43:01 +02:00
e0c52b06fd cro: abstract out and use for chromecasting radio streams 2024-06-09 22:42:50 +02:00
e94371887b zaatar: disable audio stuff 2024-06-09 19:59:17 +02:00
b0bb5047b1 restic: fix listen address 2024-06-07 11:14:23 +02:00
48419a1106 dashboard: reorder and add github issues 2024-06-07 11:14:13 +02:00
b74dda987e gpg-agent: use rofi for pinentry 2024-06-05 17:02:22 +02:00
1ffae8e5c9 update to 24.05 2024-06-03 12:45:25 +02:00
b8bf6b2b71 ipa: add palatal plosive 2024-05-25 22:12:37 +02:00
9a42b8e125 genpassphrase: init 2024-05-22 20:01:37 +02:00
c7f6257539 mpv-tv: pin playlists 2024-05-16 22:44:00 +02:00
008d33265b use cachix cache 2024-05-16 22:10:17 +02:00
3ea66b6445 panoptikon: do not fail on diff
this was a weird one
2024-05-08 09:01:12 +02:00
2e13dfe565 webdav: remove 2024-05-08 06:41:06 +02:00
edf26867b1 webdav: mount nextclouds 2024-05-08 06:40:41 +02:00
ad1d36cd0b panoptikon: use plain diff and do not store git state 2024-05-08 06:37:53 +02:00
d51ffe9735 zoom: use from unstable 2024-05-08 06:37:29 +02:00
527439cf9d dunst: add command to list recent notifications 2024-05-08 06:37:17 +02:00
4871d8d0d8 mpv-tv: update iptv hash 2024-05-04 22:45:20 +02:00
407d6309a5 xdg: fix download path 2024-05-04 22:45:06 +02:00
580564964b kdeconnect: enable firewall 2024-05-04 22:44:49 +02:00
acbed9d694 packages: install gnome disk utility 2024-05-04 09:36:11 +02:00
c7caaa0fb0 fonts: install coranica, egyptianText 2024-05-04 09:35:54 +02:00
d9751b5205 kdeconnect: enable 2024-05-04 09:35:38 +02:00
62f99dea6a feat(radio, spotifyd): decrease runtime max sec 2024-05-01 16:06:50 +02:00
d162de768d feat: set xdg userdirs 2024-04-30 17:39:09 +02:00
bbf47de957 chore: update 2024-04-28 16:35:25 +02:00
e3a18282c1 feat: symlink synced directories to home 2024-04-28 13:25:24 +02:00
91aa4aeb3e feat(aerc): set gpg key id 2024-04-28 13:24:27 +02:00
b7caaeec65 feat(aerc): add translation keybind 2024-04-28 13:24:06 +02:00
58eff4733b feat(mpv-tv): add another live tv source 2024-04-28 13:23:12 +02:00
844d5849da feat(radio): try out runtimemaxsec 2024-04-28 11:02:37 +02:00
8afe6e1f11 feat(restic): change backup disk 2024-04-25 08:45:15 +02:00
7e23072334 fix(sway): does not like ß key 2024-04-23 20:39:51 +02:00
a8d92a2f41 feat: krita 2024-04-23 20:39:34 +02:00
964ae49c2f feat(obsidian-vim): leader r to refresh nerdtree 2024-04-16 19:57:41 +02:00
github-actions[bot]
6b6dd067ab flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/8cb01a0e717311680e0cbca06a76cbceba6f3ed6?narHash=sha256-PAdwm5QqdlwIqGrfzzvzZubM%2BFXtilekQ/FA0cI49/o%3D' (2024-02-13)
  → 'github:ryantm/agenix/1381a759b205dff7a6818733118d02253340fd5e?narHash=sha256-/JdiT9t%2BzzjChc5qQiF%2BjhrVhRt8figYH29rZO7pFe4%3D' (2024-04-02)
• Updated input 'home-manager':
    'github:nix-community/home-manager/652fda4ca6dafeb090943422c34ae9145787af37?narHash=sha256-cLbLPTL1CDmETVh4p0nQtvoF%2BFSEjsnJTFpTxhXywhQ%3D' (2024-02-03)
  → 'github:nix-community/home-manager/d6bb9f934f2870e5cbc5b94c79e9db22246141ff?narHash=sha256-dA82pOMQNnCJMAsPG7AXG35VmCSMZsJHTFlTHizpKWQ%3D' (2024-04-06)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/878ef7d9721bee9f81f8a80819f9211ad1f993da?narHash=sha256-MvFKESbq4rUWuaf2RKPNYENaSZEw/jaCLo2gU6oREcM%3D' (2024-03-14)
  → 'github:NixOS/nixpkgs/51651a540816273b67bc4dedea2d37d116c5f7fe?narHash=sha256-edTFV4KldkCMdViC/rmpJa7oLIU8SE/S35lh/ukC7bg%3D' (2024-04-11)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/60e8f01bbc10c6a127d92bf5005cc8cceb489de8?narHash=sha256-wQnk05LJDdlODcfM1qR56Wa9IYkK2/SXS0UskFUXZyw%3D' (2024-03-17)
  → 'github:NixOS/nixpkgs/1b691969594504eabec53a11a366acf1c75387d1?narHash=sha256-iw3O6mVc%2BJx7UZMnIWyzuIc0x7xN5RY0oxZ4gbFY5wU%3D' (2024-04-13)
• Updated input 'nur':
    'github:nix-community/NUR/585df78aeb0bf632a4370891de15a4b99070f1a3?narHash=sha256-/SrPq8jfTCooM7QeRcpOvCoeGOn08NMDRC74oF/snJA%3D' (2024-03-17)
  → 'github:nix-community/NUR/51cab5c3aaf90ff4511a63962715e45cd7ee2f15?narHash=sha256-0p8h0MALnsJSF6%2BZxvwcqsm6E91Dr350FdKzLSHG%2B6k%3D' (2024-04-14)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/42baa9e2e4713572d7481f917243b07dffdf54b8?narHash=sha256-Lbdq3/TH4VrrR7A6FxIYwu5tFOcprYh8Q49Nc9s/i6c%3D' (2024-03-16)
  → 'github:oxalica/rust-overlay/a497535d074432133b683dda3a1faa8c8ab587ad?narHash=sha256-ZJxC6t2K0UAPW%2BlV%2BbJ%2BpAtwbn29eqZQzXLTG54oL%2BI%3D' (2024-04-13)
• Updated input 'voidrice':
    'github:Lukesmithxyz/voidrice/7a96fb100cf385e05c211937b509d2bf166299e6?narHash=sha256-cb5q1m/o9rNHckPz89v5TnYhXj/vFR5auBmEMMOmHUA%3D' (2023-12-30)
  → 'github:Lukesmithxyz/voidrice/cf4a12acb3a70951fd59d67e0738bf3ab2d1045c?narHash=sha256-MlOLv6/CKm1sSmikYaNDvglE/3sROZnjmacG0GP4rXM%3D' (2024-03-28)
2024-04-15 22:31:18 +02:00
02b96f2658 feat(fu-berlin): add comment for home dir mount 2024-04-15 22:23:01 +02:00
e668c1eec6 feat(panoptikon): do not care about bitcoin 2024-04-15 22:22:45 +02:00
611d3fd7bf fix: re-mock secrets 2024-04-12 09:27:08 +02:00
d6a3deecc7 chore: refactor home directory mounts 2024-04-12 09:23:39 +02:00
22b172afd9 fix(zaatar): remove obsolete fritzbox import 2024-04-12 09:22:44 +02:00
154c57f9c0 feat(hu-berlin): mount under remote/hu 2024-04-09 19:41:37 +02:00
9432fa62d8 feat(fu-berlin): mount home directories via sshfs 2024-04-09 19:41:24 +02:00
4020fd7ad2 fix: used wrong testimonial nicks 2024-04-08 10:04:55 +00:00
33f308f6b3 feat: mount fritzbox as user 2024-04-08 10:51:12 +02:00
2092e46d39 feat: @flxai testimonial 2024-04-08 08:20:17 +02:00
aff3f9ac92 feat: mount network devices under ~/remote 2024-04-08 08:17:52 +02:00
35a91d755a feat: keep downloaded files for 7 days 2024-04-07 15:08:06 +02:00
3c2a66f990 zaatar: disable influxdb 2024-04-06 17:32:15 +02:00
8633167719 fix: update path to obsidian 2024-04-05 11:41:24 +02:00
717f5f661b feat(restic): backup mobile sync 2024-04-05 11:41:13 +02:00
6ae85bde15 feat: remove beets 2024-04-05 11:40:46 +02:00
bd3fce4163 fix: Maildir is (machine-specific) state 2024-04-04 22:55:18 +02:00
077dc7d1fa fix(restic): restic user should own its password 2024-04-04 22:20:52 +02:00
33412d50a3 feat: change maildir path to sync 2024-04-04 14:30:59 +02:00
27c6aa1462 feat(syncthing): heym → kibbeh 2024-04-04 14:27:04 +02:00
e4734ce874 feat(syncthing): add trashcan, remove dead devices 2024-04-04 14:06:01 +02:00
393715a373 feat(weechat): fewer channels 2024-04-04 14:05:33 +02:00
c094653af3 feat: gomuks 2024-04-04 14:05:14 +02:00
74849558fd feat(syncthing): remove music and mundoiu 2024-04-03 15:15:43 +02:00
ee0feb3a06 feat(mpd): get music from nas. no need for syncthing anymore 2024-04-03 15:15:43 +02:00
cdd7d1a0ed feat: nemo → pcmanfm 2024-04-03 15:15:43 +02:00
6ff3f79f83 feat: mount fritzbox 2024-04-03 15:15:43 +02:00
7c17fa4728 feat: restructure home directory 2024-04-03 15:15:43 +02:00
5909167243 feat: restructure home directory 2024-04-03 07:56:13 +02:00
ee71156f3b feat(syncthing): add tmp folder 2024-04-03 07:56:13 +02:00
e0826c2f4e feat(fonts): add koine greek 2024-04-03 00:46:16 +02:00
0b0a5c3c62 feat(i3status-rust): remove weechat status as it always needs ssh to be unlocked 2024-04-03 00:46:16 +02:00
45e9c2674e feat(syncthing): reduce complexity 2024-04-02 23:26:35 +02:00
4946eceab9 fix(restic): allow receiving backups from fatteh 2024-04-02 22:03:03 +02:00
8a543eee37 chore: format 2024-04-02 21:05:24 +02:00
7482a88ef3 feat(zsh): vim edit command line 2024-04-02 21:05:04 +02:00
4b523fdad1 feat(hledger): hora standalone 2024-04-02 21:04:45 +02:00
0abebcced3 feat(maakaron): make hora tools more robust 2024-04-02 14:27:44 +02:00
6ec31211d9 feat(maakaron): hora-start, hora-stop 2024-04-02 13:48:20 +02:00
d02567677c feat(panoptikon): watch kobudo 2024-03-31 12:48:16 +02:00
62b0f425e6 feat: install graphviz 2024-03-31 12:48:03 +02:00
641b8976d5 i3: add messaging workspace 2024-03-30 23:11:03 +01:00
d9be7c5eeb feat(i3): add weechat scratchpad window 2024-03-24 12:40:01 +01:00
aecf6b8616 feat: do not depend on github for ssh keys bc insecure 2024-03-24 12:11:40 +01:00
83ca7976ce fix(stardict): move huzheng dictionary files to cyberlocker 2024-03-24 12:04:14 +01:00
e0a1194dae feat: disable power-action on fatteh bc it gets confused about the dual battery 2024-03-20 17:44:25 +01:00
da463f2c27 fix(manakish): disable systemd-networkd-wait-online 2024-03-20 15:13:15 +01:00
github-actions[bot]
df20b34b2b flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/1ef2e671c3b0c19053962c07dbda38332dcebf26?narHash=sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA%3D' (2024-01-15)
  → 'github:numtide/flake-utils/b1d9ab70662946ef0850d488da1c9019f3a9752a?narHash=sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ%3D' (2024-03-11)
• Updated input 'nixinate':
    'github:matthewcroughan/nixinate/7902ae845e6cc5bd450e510cdf5e009a6e4a44d9?narHash=sha256-qHrNMYWukOKmKVf6wXOGKj1xxUnOGjvTRbt/PLLXuBE%3D' (2023-06-30)
  → 'github:matthewcroughan/nixinate/452f33c60df5b72ad0858f5f2cf224bdf1f17746?narHash=sha256-VOQrKK7Df/IVuNki%2BNshVuGkTa/Tw0GigPjWcZff6kk%3D' (2024-02-25)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/c5101e457206dd437330d283d6626944e28794b3?narHash=sha256-qxT5jSLhelfLhQ07%2BAUxSTm1VnVH%2BhQxDkQSZ/m/Smo%3D' (2024-02-23)
  → 'github:NixOS/nixpkgs/878ef7d9721bee9f81f8a80819f9211ad1f993da?narHash=sha256-MvFKESbq4rUWuaf2RKPNYENaSZEw/jaCLo2gU6oREcM%3D' (2024-03-14)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/7794d8a78570335f10b0f97ae72b14b33c6addc2?narHash=sha256-pxDFK5p7csogTirrDJFVSli4Yy0LvHaQQQj71UU0MmQ%3D' (2024-02-24)
  → 'github:NixOS/nixpkgs/60e8f01bbc10c6a127d92bf5005cc8cceb489de8?narHash=sha256-wQnk05LJDdlODcfM1qR56Wa9IYkK2/SXS0UskFUXZyw%3D' (2024-03-17)
• Updated input 'nur':
    'github:nix-community/NUR/192aa9b134f867b6811ecd0444e994ef941648db?narHash=sha256-op6sluExBoA6Y3FdeHtDINEWCXzns4jg2H%2BxfkjikuI%3D' (2024-02-24)
  → 'github:nix-community/NUR/585df78aeb0bf632a4370891de15a4b99070f1a3?narHash=sha256-/SrPq8jfTCooM7QeRcpOvCoeGOn08NMDRC74oF/snJA%3D' (2024-03-17)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/9b24383d77f598716fa0cbb8b48c97249f5ee1af?narHash=sha256-NCTw235XwSDbeTAtAwg/hOeNOgwYhVq7JjDdbkOgBeA%3D' (2024-02-24)
  → 'github:oxalica/rust-overlay/42baa9e2e4713572d7481f917243b07dffdf54b8?narHash=sha256-Lbdq3/TH4VrrR7A6FxIYwu5tFOcprYh8Q49Nc9s/i6c%3D' (2024-03-16)
2024-03-20 15:13:15 +01:00
51f51a78bd feat: there is a reason for one-monitor setup 2024-03-20 15:13:15 +01:00
155cdc68af feat(mime): add auto-added tg associations 2024-03-20 14:18:26 +01:00
82b5da8089 feat(fatteh): use light theme bc it is spring outside 2024-03-20 14:18:00 +01:00
3ddbbf3ab5 feat: illum 2024-03-20 08:13:07 +01:00
f8bfc83a61 fix(ssh): fatteh hostname 2024-03-20 08:12:59 +01:00
491a13ed95 feat: gnome-keyring not via home-manager 2024-03-20 08:12:50 +01:00
58c4f517c5 chore: update secrets 2024-03-19 23:23:08 +01:00
c1b10f0504 wip: update hashes 2024-03-19 23:16:25 +01:00
62363cc26f feat: autologin 2024-03-19 23:06:58 +01:00
f93cb20dae fix: do not make this error! 2024-03-19 23:05:43 +01:00
f57d1780fb feat(fatteh): integrate into niveum 2024-03-19 21:14:27 +01:00
d4cb0abc24 feat: disable autologin 2024-03-19 20:21:20 +01:00
1f418c9532 chore: remock secrets 2024-03-19 20:13:33 +01:00
ab3a17be25 wip: initialize fatteh 2024-03-19 20:13:13 +01:00
50a96b5f7a feat(dashboard): add calendar 2024-03-18 14:55:41 +01:00
31b44906ab feat(prometheus): monitor beta alew 2024-03-18 14:55:24 +01:00
858a7e52c3 chore: update secrets 2024-03-17 21:42:07 +01:00
f69d5c423c feat(panoptikon): allow secret configuration, telegram reporter, BTC price alert 2024-03-17 21:42:01 +01:00
04bf10a356 feat: more sanskrit radio 2024-03-17 21:41:36 +01:00
f2e522a52a feat: add brassica 2024-03-17 21:41:25 +01:00
0cbf4527c0 feat(stylix): configure theme per system 2024-03-17 21:41:05 +01:00
64972f99b7 feat(keyboard): move xcompose out of general keyboard config 2024-03-17 21:40:37 +01:00
e4be74ca87 fix(dashboard): do not show globally hidden feed entries 2024-03-17 21:39:59 +01:00
cad3d7ecd5 feat: install dashboard programm 2024-03-15 09:06:24 +01:00
fe199e02a0 feat(i3): obsidian scratchpad 2024-03-15 09:06:15 +01:00
ef6f7bb23d fix(polyglot): path -> string 2024-03-15 09:05:51 +01:00
b36be765e8 feat: polyglot script for language learning 2024-03-15 08:39:39 +01:00
484c445a24 feat: configure himalaya email (and add to dashboard) 2024-03-14 22:31:58 +01:00
6a15af9f0b fix(dashboard): exclude liturgy calendar 2024-03-14 21:43:29 +01:00
d464b137cb feat: use dracula theme 2024-03-14 21:43:13 +01:00
b000efddbe feat: zaatar does not need keyboard config 2024-03-14 21:41:24 +01:00
9d7eea58bd chore: update keys hash 2024-03-14 21:38:03 +01:00
ee5c127290 feat(khal): autodiscover, remove stale calendars 2024-03-14 21:28:53 +01:00
0cb3c06c0a Revert "fix(atuin): init outside promptInit"
This reverts commit 0c9f488f56.
2024-03-14 18:20:35 +01:00
0f083bd4e2 feat(prometheus): request alew API endpoint 2024-03-14 18:19:34 +01:00
19c9f39128 feat(i3): hide bar 2024-03-14 18:19:11 +01:00
6db336ec1e chore(maakaron): format 2024-03-14 18:18:58 +01:00
7d51ce0850 fix: use pkgs.system 2024-03-14 18:18:36 +01:00
0ee765de37 feat(vdirsyncer): sync new calendars 2024-03-13 09:02:34 +01:00
aa2c84142b feat(i3): reintroduce workspaces, add info workspace, reduce bar info 2024-03-13 09:02:34 +01:00
3af20cdd7b feat(maakaron): configure git, shell and tools 2024-03-12 14:43:12 +01:00
0c9f488f56 fix(atuin): init outside promptInit 2024-03-12 14:42:27 +01:00
2f9df623fd chore: remove config input in stardict 2024-03-12 14:42:27 +01:00
8b7745f473 fix: make more mac-compatible 2024-03-12 14:42:27 +01:00
8c12edfdb9 feat(sway): add preliminary configuration 2024-03-03 15:03:20 +01:00
f263d5d175 chore: format 2024-02-27 20:59:54 +01:00
61b78cfc73 fix(bluetooth): use default package 2024-02-27 20:59:43 +01:00
github-actions[bot]
18dbceea76 flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/417caa847f9383e111d1397039c9d4337d024bf0' (2023-12-24)
  → 'github:ryantm/agenix/8cb01a0e717311680e0cbca06a76cbceba6f3ed6' (2024-02-13)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/20f65b86b6485decb43c5498780c223571dd56ef' (2024-02-09)
  → 'github:NixOS/nixpkgs/c5101e457206dd437330d283d6626944e28794b3' (2024-02-23)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/aeea37e779933d7b77f4a0e9c1bb383ab71cd450' (2024-02-11)
  → 'github:NixOS/nixpkgs/7794d8a78570335f10b0f97ae72b14b33c6addc2' (2024-02-24)
• Updated input 'nur':
    'github:nix-community/NUR/3a315bbd42ead8a1bafa90e8c3d14c43c80db912' (2024-02-10)
  → 'github:nix-community/NUR/192aa9b134f867b6811ecd0444e994ef941648db' (2024-02-24)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=00afd8bdb8e297ca3f8d1316d058b867ab794674' (2024-02-02)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=00af6f8e749d720a0423834024adafef4f9ebf03' (2024-02-16)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/49550275c3956b861dbb7cb83a732803f013bdbb' (2024-02-10)
  → 'github:oxalica/rust-overlay/9b24383d77f598716fa0cbb8b48c97249f5ee1af' (2024-02-24)
2024-02-27 20:59:12 +01:00
Meinhardt
0c97aa2461 feat(maakaron): init system 2024-02-27 11:32:29 +01:00
680cf898b6 fix(neovim): no expandtab in tsv 2024-02-25 22:19:12 +01:00
77a4b6fd32 feat: customize compose keys 2024-02-25 22:18:57 +01:00
fce3abfe0c Merge remote-tracking branch 'origin/update_flake_lock_action' 2024-02-14 09:38:28 +01:00
d1624915c4 feat(keyboards): add locally, patch persian/arabic keyboard
Fixes #51
2024-02-13 23:30:54 +01:00
github-actions[bot]
d68c5460fd flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/10cd9c53115061aa6a0a90aad0b0dde6a999cdb9' (2024-01-19)
  → 'github:nix-community/home-manager/652fda4ca6dafeb090943422c34ae9145787af37' (2024-02-03)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/d7f206b723e42edb09d9d753020a84b3061a79d8' (2024-01-22)
  → 'github:NixOS/nixpkgs/20f65b86b6485decb43c5498780c223571dd56ef' (2024-02-09)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/a95d98f05a5da6cf66bef2584cf7a70b474d4518' (2024-01-23)
  → 'github:NixOS/nixpkgs/aeea37e779933d7b77f4a0e9c1bb383ab71cd450' (2024-02-11)
• Updated input 'nur':
    'github:nix-community/NUR/8452fbba02b789b9046356a9546db1a312a04804' (2024-01-23)
  → 'github:nix-community/NUR/3a315bbd42ead8a1bafa90e8c3d14c43c80db912' (2024-02-10)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=186f7cff7d09c0330be2ae6644eb16ad531a5214' (2024-01-09)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=00afd8bdb8e297ca3f8d1316d058b867ab794674' (2024-02-02)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/f889dc31ef97835834bdc3662394ebdb3c96b974' (2024-01-23)
  → 'github:oxalica/rust-overlay/49550275c3956b861dbb7cb83a732803f013bdbb' (2024-02-10)
2024-02-11 00:43:42 +00:00
bb0dd24abd feat(keyboard): add link to buckwalter source, save cop on cyberlocker 2024-02-09 18:26:26 +01:00
c66bc3cb68 feat(fu-berlin): no need for blackboard calendar 2024-02-09 17:04:01 +01:00
0c612eeb7a fix: disable stockholm radio news 2024-02-06 15:03:36 +01:00
a34554a283 fix(pandoc): update hash 2024-02-05 10:20:19 +01:00
b214e55690 fix(panoptikon): limit restart 2024-02-05 10:20:03 +01:00
065b3a2d6a feat(dmenu-randr): always do multi-monitor 2024-02-02 09:10:31 +01:00
6d9ce99e5b fix: use my own dmenu-randr because @LukeSmithxyz is not feature-complete 2024-02-02 09:07:46 +01:00
a3c69580e5 chore: update 2024-01-23 15:19:32 +01:00
fa71f02dd0 feat(aerc): office upgrade 2024-01-23 14:07:10 +01:00
82993ca54a feat(email): bye bye meinhark 2024-01-10 14:22:38 +01:00
04c60776e3 feat: disable kiosk on zaatar 2024-01-10 11:11:46 +01:00
50e18c168e feat: add journalctl to admin essentials 2024-01-09 23:53:21 +01:00
5fd7bb61d5 fix(spotifyd): give access to pipewire 2024-01-09 23:52:55 +01:00
64d7437fa4 fix(spotifyd): disable mpris
fixes #48
big thanks to @n0ur and her copilot
2024-01-09 21:29:20 +01:00
76d8ebaf2b feat: cro for temporary chromium profile 2024-01-09 20:38:55 +01:00
2b5dde01ec feat: reenable man-pandoc
it was not broken
fixes #47
2024-01-09 19:38:04 +01:00
7b0f65645d feat(makanek): do not need onlyoffice 2024-01-09 14:57:29 +01:00
a9f51807b4 feat: reinstate nixinate for aarch64 ful 2024-01-09 08:49:55 +01:00
53d9e05b95 feat: add sqlite to admin essentials 2024-01-09 08:13:37 +01:00
425a2ad7f5 feat: factor out and spread admin essentials package 2024-01-09 08:00:33 +01:00
899163c847 feat(streams): hitradio FFH 2024-01-09 07:59:55 +01:00
ca48e370ff feat: use NixOS gnome keyring instead of the one from HM 2024-01-09 07:59:41 +01:00
f79ab7211c fix(zaatar): systemwide pipewire 2024-01-08 14:55:38 +01:00
6121a8db3a feat: reactivate krebs wallpaper 2024-01-08 14:55:04 +01:00
ef7c53f15b feat(pipewire): try to do some pulseaudio networking stuff 2024-01-02 10:35:03 +01:00
e5a3ce5f8d feat(stylix): onedark is my new best friend 2023-12-29 20:01:40 +01:00
63cdfef045 chore: allow insecure electron for jellyfin or something 2023-12-29 20:01:26 +01:00
19c916b771 feat: deploy only with 2 cores 2023-12-29 20:01:01 +01:00
acdc09efe0 chore: add link to arm issue 2023-12-28 21:31:50 +01:00
13860cfb32 chore: update 2023-12-28 12:28:59 +01:00
77d75b4d8b feat: replace nixinate by nixos-rebuild 2023-12-28 12:28:59 +01:00
263e13c8f8 feat: gthumb 2023-12-27 10:38:42 +01:00
e3fcf6e817 chore: re-mock secrets 2023-12-23 09:43:26 +01:00
89c37d390f feat(telegram-bots): add streaming link converter 2023-12-23 07:47:06 +01:00
3eeb5fd787 fix: disable pandoc man for now 2023-12-23 07:39:29 +01:00
cf0c353856 chore: update gardiner new font 2023-12-23 07:38:59 +01:00
c76c396342 chore: update 2023-12-21 19:19:36 +01:00
d60ac5de17 feat(fonts): add hebrew font 2023-12-21 19:19:30 +01:00
d9c324c22d fix(aerc): i want to read email again 2023-12-08 19:01:09 +01:00
aec50b5d84 feat: update to 23.11 2023-12-06 14:42:13 +01:00
7da1e6178d fix: bluetooth sound? 2023-12-05 19:06:59 +01:00
5fba7afd82 feat: allow to use gpt4 from klem 2023-11-28 16:11:23 +01:00
683a206c7b feat(panoptikon): add fu events 2023-11-28 16:11:04 +01:00
014cead444 feat(streams): add swr3 2023-11-20 09:05:52 +01:00
github-actions[bot]
5ca1312464 flake.lock: Update
Flake lock file updates:

• Updated input 'coptic-dictionary':
    'github:kmein/coptic-dictionary/bd6762d70d079ddc6a9cb40b008e234ee662865e' (2023-09-15)
  → 'github:kmein/coptic-dictionary/faa6cd85c46e5a4d5a676a38c2799e6b2ba44460' (2023-11-16)
• Updated input 'home-manager':
    'github:nix-community/home-manager/07682fff75d41f18327a871088d20af2710d4744' (2023-09-19)
  → 'github:nix-community/home-manager/04bac349d585c9df38d78e0285b780a140dc74a4' (2023-11-12)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/34bdaaf1f0b7fb6d9091472edc968ff10a8c2857' (2023-11-01)
  → 'github:NixOS/nixpkgs/9fb122519e9cd465d532f736a98c1e1eb541ef6f' (2023-11-16)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/13f373eab6f2b2b366701652372af5cee099f637' (2023-11-03)
  → 'github:NixOS/nixpkgs/3fe4f799067d0458b386bdb4fbdaea55315e8ee0' (2023-11-19)
• Updated input 'nur':
    'github:nix-community/NUR/77be844f9f98a9abd055dca953f60a15f4f457e3' (2023-11-03)
  → 'github:nix-community/NUR/ce4bf2a6f08aea6c6824cffd7f511058764d83ab' (2023-11-18)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=57f33219ab35e41b3c2108280469bbb1575f8da6' (2023-10-31)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=d64d84117ec57bb03e67a2f0b90be8b7fbbc424f' (2023-11-18)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/321affd863e3e4e669990a1db5fdabef98387b95' (2023-11-03)
  → 'github:oxalica/rust-overlay/616074a1b2a71bbe44da4cc29a64255aecb8d541' (2023-11-18)
• Updated input 'voidrice':
    'github:Lukesmithxyz/voidrice/ea3e1e14cc49d68c9900fb05d9ee7bb9e719688e' (2023-10-29)
  → 'github:Lukesmithxyz/voidrice/07952026753f1bbeaf5b6c4eb5414a9c51536041' (2023-11-15)
2023-11-19 00:45:18 +00:00
3b891aea90 feat: remove meinhark@hu 2023-11-07 09:14:49 +01:00
b096a1c1ae feat(panoptikon): watch humboldt-preis 2023-11-06 10:55:07 +01:00
a211650860 chore: update 2023-11-03 10:58:11 +01:00
8f895f01a7 feat: ledger -> hledger 2023-10-30 14:26:50 +01:00
765a99d89f feat(stw-berlin): use correct user and group 2023-10-30 14:26:11 +01:00
c9cd49c3ac fix(hledger-backup): run as root 2023-10-30 14:25:54 +01:00
0f612ba72b chore: update 2023-10-30 06:34:10 +01:00
0f6819f54a feat: freies radio kassel 2023-10-29 11:55:29 +01:00
6ffed60aaf fix: radio arabica -> radio orient 2023-10-29 11:49:56 +01:00
0a847dbb1e feat(weechat): ignore prometheus 2023-10-28 17:15:10 +02:00
074a6b9434 feat(aerc): better attachment regex 2023-10-17 12:34:47 +02:00
229a48ac07 feat(emailmenu): case insensitive, correct prompt 2023-10-17 12:34:36 +02:00
github-actions[bot]
df508de28b flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/1f677b3e161d3bdbfd08a939e8f25de2568e0ef4' (2023-09-22)
  → 'github:ryantm/agenix/daf42cb35b2dc614d1551e37f96406e4c4a2d3e4' (2023-10-08)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/8a4c17493e5c39769f79117937c79e1c88de6729' (2023-10-03)
  → 'github:NixOS/nixpkgs/bd1cde45c77891214131cbbea5b1203e485a9d51' (2023-10-11)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/96d35bdda3d38b5d0a13b4deddf5bbb6fb503cd2' (2023-10-06)
  → 'github:NixOS/nixpkgs/00e71387ae4107c935daf09b24b021d4b1269b1d' (2023-10-15)
• Updated input 'nur':
    'github:nix-community/NUR/e9db143072899753216cd84143489ed2a544e793' (2023-10-06)
  → 'github:nix-community/NUR/00cf27339d55115a0f5311041dded91049e4426d' (2023-10-14)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=7377d4764fd086f8d223ee4e3c900b5ed5f6800e' (2023-10-05)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=09c204fd5bbeb28ef415f7b1c09a7cfc1119d6b7' (2023-10-12)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/fdb37574a04df04aaa8cf7708f94a9309caebe2b' (2023-10-06)
  → 'github:oxalica/rust-overlay/dce60ca7fca201014868c08a612edb73a998310f' (2023-10-14)
2023-10-15 18:42:57 +02:00
05702d9917 feat(i3status-rust): use sensible separator for music 2023-10-15 18:42:12 +02:00
98c0e744ce chore: update secrets 2023-10-11 17:31:34 +02:00
33770cdf63 chore: update email passwords 2023-10-11 11:45:11 +02:00
dbecace73b chore: remock secrets 2023-10-10 23:41:37 +02:00
04738b91ee feat(i3status-rust): show unread miniflux items 2023-10-10 22:38:40 +02:00
d7c3e03c0f feat(mpv): add mpris support 2023-10-10 13:06:26 +02:00
5811fa3921 feat: pulseaudio → pipewire 2023-10-10 13:06:17 +02:00
f435277463 feat(i3status): show what music is playing 2023-10-10 13:06:00 +02:00
587ec584c1 fix(i3): play-pause on play-pause key 2023-10-10 13:05:47 +02:00
832b115a0d feat(hledger): hora-year wrapper 2023-10-09 10:00:20 +02:00
385a26ac9d chore: update 2023-10-06 15:09:27 +02:00
1b92a35237 feat(aerc): compact pronouns 2023-10-06 14:50:05 +02:00
06805e5b2a fix(aerc): respect the damn signature! 2023-10-06 14:47:10 +02:00
3f50c45bed feat: emailmenu 2023-10-06 12:29:21 +02:00
5a4d49e059 feat(aerc): add pronouns 2023-10-06 10:57:35 +02:00
78eb463742 feat(unicodmenu): add emoji flags 2023-10-06 10:50:31 +02:00
55f0484f93 feat: install dhall 2023-10-06 10:50:16 +02:00
75d19297ee feat(aerc): do not slowly suggest contacts 2023-10-04 19:19:52 +02:00
084a56b0a1 feat: no more fsklassp 2023-10-04 19:19:52 +02:00
3c5246b159 feat: thunderbird 2023-09-28 17:54:20 +02:00
73ce1bc4b5 feat(radio): install qasaid refresher script 2023-09-28 13:40:39 +02:00
84b4e50e64 feat: jellyfin media player 2023-09-21 07:27:42 +02:00
ed160923c7 feat(fu-berlin): mount zodiac cifs 2023-09-21 07:27:11 +02:00
38c1dc8745 fix: one-dark → onedark 2023-09-18 12:05:16 +02:00
559a6cdc86 feat(fu-berlin): mount zodiac cifs 2023-09-18 12:05:01 +02:00
github-actions[bot]
d4b208b620 flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/d8c973fd228949736dedf61b7f8cc1ece3236792' (2023-07-24)
  → 'github:ryantm/agenix/572baca9b0c592f71982fca0790db4ce311e3c75' (2023-09-15)
• Updated input 'coptic-dictionary':
    'github:kmein/coptic-dictionary/7316ef7a4264afa65c96a2e089845c79fa25f19c' (2023-08-07)
  → 'github:kmein/coptic-dictionary/bd6762d70d079ddc6a9cb40b008e234ee662865e' (2023-09-15)
• Added input 'coptic-dictionary/niveum':
    'github:kmein/niveum/65dc602d679b591224f09ea83b66ad0780a4664d' (2023-09-15)
• Added input 'coptic-dictionary/niveum/agenix':
    'github:ryantm/agenix/d8c973fd228949736dedf61b7f8cc1ece3236792' (2023-07-24)
• Added input 'coptic-dictionary/niveum/agenix/darwin':
    'github:lnl7/nix-darwin/87b9d090ad39b25b2400029c64825fc2a8868943' (2023-01-09)
• Added input 'coptic-dictionary/niveum/agenix/darwin/nixpkgs':
    follows 'coptic-dictionary/niveum/agenix/nixpkgs'
• Added input 'coptic-dictionary/niveum/agenix/home-manager':
    follows 'coptic-dictionary/niveum/home-manager'
• Added input 'coptic-dictionary/niveum/agenix/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/coptic-dictionary':
    'github:kmein/coptic-dictionary/7316ef7a4264afa65c96a2e089845c79fa25f19c' (2023-08-07)
• Added input 'coptic-dictionary/niveum/coptic-dictionary/kellia-dictionary':
    'github:KELLIA/dictionary/4fe62847e93b8a87ad7ca5de19190b34ff9e0c99' (2022-08-19)
• Added input 'coptic-dictionary/niveum/coptic-dictionary/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/flake-utils':
    'github:numtide/flake-utils/f9e7cf818399d17d347f847525c5a5a8032e4e44' (2023-08-23)
• Added input 'coptic-dictionary/niveum/flake-utils/systems':
    'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e' (2023-04-09)
• Added input 'coptic-dictionary/niveum/home-manager':
    'github:nix-community/home-manager/5bac4a1c06cd77cf8fc35a658ccb035a6c50cd2c' (2023-08-28)
• Added input 'coptic-dictionary/niveum/home-manager/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/menstruation-backend':
    'github:kmein/menstruation.rs/e34af4393963cdbadb456b7b9ae2e95e6db7b8a3' (2023-02-22)
• Added input 'coptic-dictionary/niveum/menstruation-backend/flake-utils':
    follows 'coptic-dictionary/niveum/flake-utils'
• Added input 'coptic-dictionary/niveum/menstruation-backend/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/menstruation-backend/rust-overlay':
    follows 'coptic-dictionary/niveum/rust-overlay'
• Added input 'coptic-dictionary/niveum/menstruation-telegram':
    'github:kmein/menstruation-telegram/f7ddb6d9610aacb50ec66a3ce1bdc49fe4664a49' (2023-02-22)
• Added input 'coptic-dictionary/niveum/menstruation-telegram/flake-utils':
    follows 'coptic-dictionary/niveum/flake-utils'
• Added input 'coptic-dictionary/niveum/menstruation-telegram/menstruation-backend':
    follows 'coptic-dictionary/niveum/menstruation-backend'
• Added input 'coptic-dictionary/niveum/menstruation-telegram/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs-old'
• Added input 'coptic-dictionary/niveum/nix-on-droid':
    'github:t184256/nix-on-droid/2301e01d48c90b60751005317de7a84a51a87eb6' (2023-06-30)
• Added input 'coptic-dictionary/niveum/nix-on-droid/home-manager':
    follows 'coptic-dictionary/niveum/home-manager'
• Added input 'coptic-dictionary/niveum/nix-on-droid/nix-formatter-pack':
    'github:Gerschtli/nix-formatter-pack/14876cc8fe94a3d329964ecb073b4c988c7b61f5' (2022-10-25)
• Added input 'coptic-dictionary/niveum/nix-on-droid/nix-formatter-pack/nixpkgs':
    follows 'coptic-dictionary/niveum/nix-on-droid/nixpkgs'
• Added input 'coptic-dictionary/niveum/nix-on-droid/nix-formatter-pack/nmd':
    'gitlab:rycee/nmd/b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169' (2022-10-19)
• Added input 'coptic-dictionary/niveum/nix-on-droid/nix-formatter-pack/nmt':
    'gitlab:rycee/nmt/d83601002c99b78c89ea80e5e6ba21addcfe12ae' (2022-03-23)
• Added input 'coptic-dictionary/niveum/nix-on-droid/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/nix-on-droid/nixpkgs-for-bootstrap':
    'github:NixOS/nixpkgs/c7ff1b9b95620ce8728c0d7bd501c458e6da9e04' (2023-06-16)
• Added input 'coptic-dictionary/niveum/nix-on-droid/nmd':
    'gitlab:rycee/nmd/b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169' (2022-10-19)
• Added input 'coptic-dictionary/niveum/nixinate':
    'github:matthewcroughan/nixinate/7902ae845e6cc5bd450e510cdf5e009a6e4a44d9' (2023-06-30)
• Added input 'coptic-dictionary/niveum/nixinate/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/nixpkgs':
    'github:NixOS/nixpkgs/9075cba53e86dc318d159aee55dc9a7c9a4829c1' (2023-09-02)
• Added input 'coptic-dictionary/niveum/nixpkgs-old':
    'github:NixOS/nixpkgs/50fc86b75d2744e1ab3837ef74b53f103a9b55a0' (2023-04-27)
• Added input 'coptic-dictionary/niveum/nixpkgs-unstable':
    'github:NixOS/nixpkgs/3f9e803102d49388de3862e340ac2f9cbe7381e8' (2023-09-02)
• Added input 'coptic-dictionary/niveum/nur':
    'github:nix-community/NUR/91ccb8b645a380a508704c57fa509e09b8b2b33b' (2023-09-02)
• Added input 'coptic-dictionary/niveum/recht':
    'github:kmein/recht/5fa158ce21de797bd95a934dab8d4403b7531d20' (2023-02-23)
• Added input 'coptic-dictionary/niveum/recht/blessings':
    'git+https://cgit.krebsco.de/blessings?ref=refs/heads/master&rev=d94712a015636efe7ec79bc0a2eec6739d0be779' (2019-02-05)
• Added input 'coptic-dictionary/niveum/recht/flake-utils':
    follows 'coptic-dictionary/niveum/flake-utils'
• Added input 'coptic-dictionary/niveum/recht/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=6216c30551876303dac5373e92690a7f05fd0f6f' (2023-08-14)
• Added input 'coptic-dictionary/niveum/rust-overlay':
    'github:oxalica/rust-overlay/cdf3b15af70f2db17d5f47822f12016f1a89bd73' (2023-09-02)
• Added input 'coptic-dictionary/niveum/rust-overlay/flake-utils':
    follows 'coptic-dictionary/niveum/flake-utils'
• Added input 'coptic-dictionary/niveum/rust-overlay/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/scripts':
    'github:kmein/scripts/55dff522684f342f4e970116ab374ba999539288' (2023-07-13)
• Added input 'coptic-dictionary/niveum/scripts/flake-utils':
    follows 'coptic-dictionary/niveum/flake-utils'
• Added input 'coptic-dictionary/niveum/scripts/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/scripts/rust-overlay':
    follows 'coptic-dictionary/niveum/rust-overlay'
• Added input 'coptic-dictionary/niveum/stylix':
    'github:danth/stylix/5c829554280f3139ddbfce8561d7430efbf2abfb' (2023-07-27)
• Added input 'coptic-dictionary/niveum/stylix/base16':
    'github:SenchoPens/base16.nix/dddf2e1c04845d43c89a8e9e37d574519649a404' (2023-07-17)
• Added input 'coptic-dictionary/niveum/stylix/base16/fromYaml':
    'github:SenchoPens/fromYaml/11fbbbfb32e3289d3c631e0134a23854e7865c84' (2023-07-16)
• Added input 'coptic-dictionary/niveum/stylix/flake-compat':
    'github:edolstra/flake-compat/35bb57c0c8d8b62bbfd284272c928ceb64ddbde9' (2023-01-17)
• Added input 'coptic-dictionary/niveum/stylix/home-manager':
    follows 'coptic-dictionary/niveum/home-manager'
• Added input 'coptic-dictionary/niveum/stylix/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/telebots':
    'github:kmein/telebots/5527e359e8394f2f66067de7f61587eb65055209' (2023-02-23)
• Added input 'coptic-dictionary/niveum/telebots/flake-utils':
    'github:numtide/flake-utils/3db36a8b464d0c4532ba1c7dda728f4576d6d073' (2023-02-13)
• Added input 'coptic-dictionary/niveum/telebots/nixpkgs':
    'github:NixOS/nixpkgs/eabc38219184cc3e04a974fe31857d8e0eac098d' (2022-08-02)
• Added input 'coptic-dictionary/niveum/tinc-graph':
    'github:kmein/tinc-graph/91a3a85beaaec4ec43ea5a41322c3a5a6e04edc4' (2023-06-23)
• Added input 'coptic-dictionary/niveum/tinc-graph/flake-utils':
    follows 'coptic-dictionary/niveum/flake-utils'
• Added input 'coptic-dictionary/niveum/tinc-graph/nixpkgs':
    follows 'coptic-dictionary/niveum/nixpkgs'
• Added input 'coptic-dictionary/niveum/tinc-graph/rust-overlay':
    follows 'coptic-dictionary/niveum/rust-overlay'
• Added input 'coptic-dictionary/niveum/voidrice':
    'github:Lukesmithxyz/voidrice/86f05abcce1fd270032975775adb40040c746cfe' (2023-08-25)
• Added input 'coptic-dictionary/niveum/wallpaper-generator':
    'github:pinpox/wallpaper-generator/a2223b9b0c51e0eee0d0b23a5e87228e370bdd5c' (2021-03-15)
• Added input 'coptic-dictionary/niveum/wallpaper-generator/flake-utils':
    follows 'coptic-dictionary/niveum/flake-utils'
• Added input 'coptic-dictionary/niveum/wallpaper-generator/nixpkgs':
    'path:/nix/store/vw365chp87kvfczxm26qiq7z2pq3jk5z-source?lastModified=1615532953&narHash=sha256-SWpaGjrp/INzorEqMz3HLi6Uuk9I0KAn4YS8B4n3q5g%3D&rev=916ee862e87ac5ee2439f2fb7856386b4dc906ae' (2021-03-12)
• Added input 'coptic-dictionary/niveum/wallpapers':
    'github:kmein/wallpapers/7c553bc6bd78afa6dbf2824691466bbad0d8e6e9' (2020-05-12)
• Updated input 'flake-utils':
    'github:numtide/flake-utils/f9e7cf818399d17d347f847525c5a5a8032e4e44' (2023-08-23)
  → 'github:numtide/flake-utils/ff7b65b44d01cf9ba6a71320833626af21126384' (2023-09-12)
• Updated input 'home-manager':
    'github:nix-community/home-manager/5bac4a1c06cd77cf8fc35a658ccb035a6c50cd2c' (2023-08-28)
  → 'github:nix-community/home-manager/9787dffff5d315c9593d3f9fb0f9bf2097e1b57b' (2023-09-11)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/9075cba53e86dc318d159aee55dc9a7c9a4829c1' (2023-09-02)
  → 'github:NixOS/nixpkgs/360a7d31c30abefdc490d203f80e3221b7a24af2' (2023-09-15)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/3f9e803102d49388de3862e340ac2f9cbe7381e8' (2023-09-02)
  → 'github:NixOS/nixpkgs/46423a1a750594236673c1d741def4e93cf5a8f7' (2023-09-17)
• Updated input 'nur':
    'github:nix-community/NUR/91ccb8b645a380a508704c57fa509e09b8b2b33b' (2023-09-02)
  → 'github:nix-community/NUR/15981b93620d6d50c0bef767028213810806ad74' (2023-09-16)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=6216c30551876303dac5373e92690a7f05fd0f6f' (2023-08-14)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=43d5a6ae57ae4a9051724767df133da4064d3461' (2023-09-15)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/cdf3b15af70f2db17d5f47822f12016f1a89bd73' (2023-09-02)
  → 'github:oxalica/rust-overlay/f84bb1621574473d05e6ed79ba57a371d8ad8259' (2023-09-16)
• Updated input 'voidrice':
    'github:Lukesmithxyz/voidrice/86f05abcce1fd270032975775adb40040c746cfe' (2023-08-25)
  → 'github:Lukesmithxyz/voidrice/b8cd0ab4953d053fef09c48ba04f2fbb2df57aa4' (2023-09-05)
2023-09-17 00:41:57 +00:00
51bbbc9e56 feat: mpv-iptv 2023-09-15 14:37:33 +02:00
39e5653825 fix(vim): set ft=jq 2023-09-15 11:46:58 +02:00
65dc602d67 feat: stardict-tools 2023-09-15 10:59:14 +02:00
333bf9e145 feat: jq-lsp 2023-09-15 10:58:53 +02:00
4052df257c feat: moin gib sometimes 2023-09-14 15:57:28 +02:00
github-actions[bot]
1ca8827e91 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/2a6679aa9cc3872c29ba2a57fe1b71b3e3c5649f' (2023-08-15)
  → 'github:nix-community/home-manager/5bac4a1c06cd77cf8fc35a658ccb035a6c50cd2c' (2023-08-28)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/74e5bdc5478ebbe7ba5849f0d765f92757bb9dbf' (2023-08-25)
  → 'github:NixOS/nixpkgs/9075cba53e86dc318d159aee55dc9a7c9a4829c1' (2023-09-02)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/38b9aaf6682015f1d2fc7b7f48da96992c30cfa3' (2023-08-26)
  → 'github:NixOS/nixpkgs/3f9e803102d49388de3862e340ac2f9cbe7381e8' (2023-09-02)
• Updated input 'nur':
    'github:nix-community/NUR/0f81f016eecec153a26099beb25b0c8bac87bd23' (2023-08-26)
  → 'github:nix-community/NUR/91ccb8b645a380a508704c57fa509e09b8b2b33b' (2023-09-02)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/e90223633068a44f0fb62374e0fa360ccc987292' (2023-08-26)
  → 'github:oxalica/rust-overlay/cdf3b15af70f2db17d5f47822f12016f1a89bd73' (2023-09-02)
2023-09-11 11:39:31 +02:00
a4f3c98fae fix(syncthing): do not sync zotero 2023-09-08 17:43:43 +02:00
f403319fea fix: hu vpn setup for an fu student 2023-09-08 16:37:45 +02:00
d0b405fb15 fix(prometheus): do not fail bc of secrets 2023-09-08 13:11:23 +02:00
143 changed files with 6088 additions and 1793 deletions

21
.bin/fix-sd.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/sh
set -xfu
drive="$1"
mountpoint="/media/sd-card-$(date +%s)"
backup_directory="$(pwd)"
trap clean EXIT
clean() {
umount "$mountpoint"
rmdir "$mountpoint"
fsck.exfat "$drive"
}
filenames="$(fsck.exfat "$drive" 2>&1 | sed -nE "s/.* file '(.*?)' is not allocated.*/\1/p")"
mkdir "$mountpoint"
mount "$drive" "$mountpoint"
echo "$filenames" | while read -r filename; do
find "$mountpoint" -type f -name "$filename" -exec mv {} "$backup_directory" \;
done

View File

@@ -7,11 +7,13 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
system: [makanek,manakish,kabsa,zaatar,ful]
system: [makanek,manakish,kabsa,zaatar,ful,fatteh,kibbeh]
steps:
- uses: actions/checkout@v3
- name: Install QEMU (ARM)
run: sudo apt-get install -y qemu-user-static
run: |
sudo apt-get update
sudo apt-get install -y qemu-user-static
if: ${{ matrix.system == 'ful' }}
- name: Install Nix (ARM)
uses: cachix/install-nix-action@v16

View File

@@ -7,4 +7,6 @@
> 2. Transf., _snow-white, snowy_ (mostly poet.): a similitudine sic: Corpore niveum candorem, aspectu igneum ardorem assequebatur, Auct. Her. 4, 33, 44: lacerti, Verg. A. 8, 387: lac, id. E. 2, 20: hanc si capite niveae agnae exorari judicas, Sen. Q. N. 2, 36: Briseis niveo colore, Hor. C. 2, 4, 3: vestis, Ov. M. 10, 432: candidior nivei folio, Galatea, ligustri, id. ib. 13, 789: dens, id. H. 18, 18: quā notam duxit niveus videri, Hor. C. 4, 2, 59: panis, Juv. 5, 70: flumen, _clear, pellucid_, Sen. Hippol. 504: undae, Mart. 7, 32, 11: tribuni, _clothed in white togas_, Calp. Ecl. 7, 29; so, Quirites, Juv. 10, 45.
## Pressestimmen
> das ist ja pure poesie —[xkey](https://github.com/riotbib)
> das ist ja pure poesie —[riotbib](https://github.com/riotbib/)
> Deine Configs sind wunderschön <3 —[flxai](https://github.com/flxai/)

View File

@@ -0,0 +1,119 @@
{
pkgs,
niveumPackages,
lib,
...
}: let
darwin = lib.strings.hasSuffix "-darwin" pkgs.system;
in {
environment.systemPackages =
[
pkgs.htop
pkgs.w3m
pkgs.wget
# ARCHIVE TOOLS
pkgs.unzip
pkgs.unrar
pkgs.p7zip
pkgs.sshuttle
pkgs.zip
# MONITORS
pkgs.iftop # interface bandwidth monitor
pkgs.lsof # list open files
# SHELL
pkgs.sqlite
pkgs.fd # better find
pkgs.tree
pkgs.parallel # for parallel, since moreutils shadows task spooler
pkgs.ripgrep # better grep
pkgs.rlwrap
pkgs.progress # display progress bars for pipes
pkgs.file # determine file type
pkgs.gdu # ncurses disk usage (ncdu is broken)
pkgs.rmlint # remove duplicate files
pkgs.jq # json toolkit
pkgs.jless # less(1) for json
pkgs.fq # toolkit for yaml, xml and binaries
pkgs.bc # calculator
pkgs.pari # gp -- better calculator
pkgs.ts
niveumPackages.vimv
niveumPackages.vg
niveumPackages.fkill
niveumPackages.cyberlocker-tools
niveumPackages.untilport
niveumPackages.kpaste
# HARDWARE
pkgs.pciutils # for lspci
]
++ lib.optionals (!darwin) [
pkgs.usbutils # for lsusb
pkgs.lshw # for lshw
pkgs.iotop # I/O load monitor
pkgs.psmisc # for killall, pstree
];
security.wrappers = {
pmount = {
setuid = true;
owner = "root";
group = "root";
source = "${pkgs.pmount}/bin/pmount";
};
pumount = {
setuid = true;
owner = "root";
group = "root";
source = "${pkgs.pmount}/bin/pumount";
};
};
environment.shellAliases = let
take = pkgs.writers.writeDash "take" ''
mkdir "$1" && cd "$1"
'';
cdt = pkgs.writers.writeDash "cdt" ''
cd "$(mktemp -d)"
pwd
'';
wcd = pkgs.writers.writeDash "wcd" ''
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.."
'';
where = pkgs.writers.writeDash "where" ''
readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname
'';
in
{
nixi = "nix repl '<nixpkgs>'";
take = "source ${take}";
wcd = "source ${wcd}";
where = "source ${where}";
# temporary files and directories
cdt = "source ${cdt}";
vit = "$EDITOR $(mktemp)";
# file safety
mv = "${pkgs.coreutils}/bin/mv --interactive";
rm = "${pkgs.coreutils}/bin/rm --interactive";
cp = "${pkgs.coreutils}/bin/cp --interactive";
# colours
cat = "${pkgs.bat}/bin/bat --theme=ansi --style=plain";
l = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso --almost-all";
ls = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso";
ll = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso -l";
la = "${pkgs.coreutils}/bin/ls --color=auto --time-style=long-iso --almost-all -l";
}
// (
if darwin
then {}
else {
"ß" = "${pkgs.util-linux}/bin/setsid";
ip = "${pkgs.iproute2}/bin/ip -c";
# systemd
s = "${pkgs.systemd}/bin/systemctl";
us = "${pkgs.systemd}/bin/systemctl --user";
j = "${pkgs.systemd}/bin/journalctl";
uj = "${pkgs.systemd}/bin/journalctl --user";
}
);
}

View File

@@ -2,9 +2,10 @@
pkgs,
config,
lib,
niveumPackages,
...
}: let
inherit (import ../lib/email.nix) defaults;
inherit (import ../lib/email.nix) defaults thunderbirdProfile;
in {
age.secrets = {
email-password-cock = {
@@ -13,6 +14,12 @@ in {
group = config.users.users.me.group;
mode = "400";
};
email-password-letos = {
file = ../secrets/email-password-letos.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-posteo = {
file = ../secrets/email-password-posteo.age;
owner = config.users.users.me.name;
@@ -22,6 +29,8 @@ in {
};
home-manager.users.me = {
accounts.email.maildirBasePath = "${config.users.users.me.home}/state/Maildir";
services.mbsync = {
enable = true;
frequency = "daily";
@@ -76,9 +85,24 @@ in {
address = "2210@cock.li";
userName = address;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-cock.path}";
realName = "";
realName = "2210";
imap.host = "mail.cock.li";
imap.port = 993;
smtp.host = imap.host;
smtp.port = 25;
smtp.tls.useStartTls = true;
};
letos =
lib.recursiveUpdate defaults
{
userName = "slfletos";
address = "letos.sprachlit@hu-berlin.de";
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-letos.path}";
imap.host = "mailbox.cms.hu-berlin.de";
imap.port = 993;
smtp.host = "mailhost.cms.hu-berlin.de";
smtp.port = 25;
smtp.tls.useStartTls = true;
};
posteo =
lib.recursiveUpdate defaults
@@ -87,14 +111,42 @@ in {
aliases = ["kmein@posteo.de"];
userName = address;
imap.host = "posteo.de";
imap.port = 993;
imap.tls.enable = true;
smtp.host = imap.host;
smtp.port = 465;
smtp.tls.enable = true;
primary = true;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-posteo.path}";
# himalaya = { enable = true; backend = "imap"; sender = "smtp"; };
himalaya = {
enable = true;
settings.backend = "imap";
};
aerc.extraAccounts.pgp-key-id = "9EDE82CC72A343A95266D0F444857074A3ACC8B7";
};
};
# programs.himalaya.enable = true;
programs.himalaya.enable = true;
programs.thunderbird = {
enable = true;
settings = {
};
profiles.${thunderbirdProfile} = {
isDefault = true;
settings = {
"mail.default_send_format" = 1;
"msgcompose.default_colors" = false;
"msgcompose.text_color" = config.lib.stylix.colors.withHashtag.base00;
"msgcompose.background_color" = config.lib.stylix.colors.withHashtag.base05;
};
userChrome = ''
'';
userContent = ''
'';
withExternalGnupg = false;
};
};
programs.aerc = {
enable = true;
@@ -153,6 +205,7 @@ in {
"*" = ":filter -x Flagged<Enter>";
};
view = {
tr = ":pipe ${niveumPackages.trans}/bin/trans -show-original n -b -no-autocorrect<Enter>"; # https://man.sr.ht/~rjarry/aerc/integrations/translator.md
"/" = ":toggle-key-passthrough <Enter> /";
q = ":close<Enter>";
O = ":open<Enter>";
@@ -227,19 +280,19 @@ in {
general.pgp-provider = "gpg";
viewer = {pager = "${pkgs.less}/bin/less -R";};
compose = {
address-book-cmd = "khard email --remove-first-line --parsable '%s'";
no-attachment-warning = "(attach|attached|attachments?|anbei|Anhang|angehängt)";
# address-book-cmd = "khard email --remove-first-line --parsable '%s'";
no-attachment-warning = "(attach|attached|attachments?|anbei|Anhang|angehängt|beigefügt)";
};
filters = {
"text/plain" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
"text/calendar" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/calendar";
"text/html" = "${pkgs.aerc}/share/aerc/filters/html"; # Requires w3m, dante
"text/plain" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
"text/calendar" = "${pkgs.aerc}/libexec/aerc/filters/calendar";
"text/html" = "${pkgs.aerc}/libexec/aerc/filters/html"; # Requires w3m, dante
# "text/html" =
# "${pkgs.aerc}/share/aerc/filters/html | ${pkgs.aerc}/share/aerc/filters/colorize";
# "text/*" =
# ''${pkgs.bat}/bin/bat -fP --theme=ansi --file-name="$AERC_FILENAME "'';
"message/delivery-status" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
"message/rfc822" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
"message/delivery-status" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
"message/rfc822" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
"application/x-sh" = "${pkgs.bat}/bin/bat -fP -l sh";
};
openers = let

View File

@@ -60,7 +60,7 @@ in {
programs.alacritty = {
enable = true;
settings = {
key_bindings = [
keyboard.bindings = [
{
key = "Plus";
mods = "Control";

View File

@@ -14,21 +14,18 @@ in {
};
passwordFile = config.age.secrets.restic.path;
extraBackupArgs = [
"--exclude=/home/kfm/projects/nixpkgs/.git"
"--exclude=/home/kfm/sync/src/nixpkgs/.git"
"--exclude=node_modules"
"--exclude=.parcel-cache"
];
paths = [
"/home/kfm/work"
"/home/kfm/projects"
"/home/kfm/Zotero"
"/home/kfm/notes"
"/home/kfm/Maildir"
"/home/kfm/sync"
"/home/kfm/state"
"/home/kfm/cloud"
"/home/kfm/mobile"
"/home/kfm/.gnupg"
"/home/kfm/.electrum"
"/home/kfm/.ssh"
"/mnt/sd-card/music"
"/mnt/sd-card/Books"
];
};

View File

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

View File

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

View File

@@ -13,17 +13,18 @@
autorenkalender =
pkgs.python3Packages.callPackage autorenkalender-package {};
in {
niveum.telegramBots.autorenkalender = {
niveum.bots.autorenkalender = {
enable = true;
time = "07:00";
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@autorenkalender"];
parseMode = "Markdown";
telegram = {
enable = true;
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@autorenkalender"];
parseMode = "Markdown";
};
command = "${autorenkalender}/bin/autorenkalender";
};
age.secrets.telegram-token-kmein.file = ../../secrets/telegram-token-kmein.age;
niveum.passport.services = [
{
title = "Autorenkalender";

79
configs/bots/celan.nix Normal file
View File

@@ -0,0 +1,79 @@
{
pkgs,
lib,
config,
...
}: {
niveum.bots.celan = {
enable = true;
time = "08:00";
telegram = {
enable = true;
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@PaulCelan"];
};
mastodon = {
enable = true;
tokenFile = config.age.secrets.mastodon-token-celan.path;
language = "de";
};
command = toString (pkgs.writers.writePython3 "random-celan.py" { libraries = [pkgs.python3Packages.lxml]; } ''
from lxml import etree
import random
def xml_text(elements):
return "".join("".join(t.itertext()) for t in elements).strip()
tree = etree.parse('${pkgs.fetchurl {
url = "http://c.krebsco.de/celan.tei.xml";
hash = "sha256-HgNmJYfhuwyfm+FcNtnnYWpJpIIU1ElHLeLiIFjF9mE=";
}}')
root = tree.getroot()
tei = {"tei": "http://www.tei-c.org/ns/1.0"}
poems = root.xpath(".//tei:lg[@type='poem']", namespaces=tei)
poem = random.choice(poems)
for stanza in poem.xpath("./tei:lg[@type='stanza']", namespaces=tei):
for line in stanza.xpath('./tei:l', namespaces=tei):
if line.text:
print(line.text.strip())
print()
current_element = poem
while current_element is not None:
if current_element.tag == "{http://www.tei-c.org/ns/1.0}text":
text_element = current_element
title = xml_text(text_element.xpath("./tei:front/tei:docTitle",
namespaces=tei))
print(f"Aus: #{title.replace(" ", "_")}", end=" ")
if date := xml_text(text_element.xpath("./tei:front/tei:docDate",
namespaces=tei)):
print(f"({date})")
break
current_element = current_element.getparent()
print("\n\n#PaulCelan #Celan #Lyrik #poetry")
'');
};
age.secrets = {
mastodon-token-celan.file = ../../secrets/mastodon-token-celan.age;
};
systemd.timers.bot-celan.timerConfig.RandomizedDelaySec = "10h";
niveum.passport.services = [
{
title = "Paul Celan Bot";
description = "sends a random poem by Paul Celan to Telegram.";
link = "https://t.me/PaulCelan";
}
];
}

View File

@@ -11,14 +11,15 @@
inherit (import ../../lib) tmpfilesConfig;
in {
imports = [
./literature-quote.nix
./astrology.nix
./logotheca.nix
./transits.nix
./autorenkalender.nix
./hesychius.nix
./smyth.nix
./nachtischsatan.nix
./tlg-wotd.nix
./celan.nix
./nietzsche.nix
];
systemd.tmpfiles.rules = map (path:
@@ -51,6 +52,7 @@ in {
telegram-token-reverse.file = ../../secrets/telegram-token-reverse.age;
telegram-token-betacode.file = ../../secrets/telegram-token-betacode.age;
telegram-token-proverb.file = ../../secrets/telegram-token-proverb.age;
telegram-token-streaming-link.file = ../../secrets/telegram-token-streaming-link.age;
};
systemd.services.telegram-reverse = {
@@ -66,6 +68,17 @@ in {
serviceConfig.LoadCredential = "token:${config.age.secrets.telegram-token-reverse.path}";
};
systemd.services.telegram-streaming-link = {
wantedBy = ["multi-user.target"];
description = "Telegram bot converting YouTube Music <-> Spotify";
enable = true;
script = ''
TELEGRAM_BOT_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")" ${telebots}/bin/telegram-streaming-link
'';
serviceConfig.Restart = "always";
serviceConfig.LoadCredential = "token:${config.age.secrets.telegram-token-streaming-link.path}";
};
systemd.services.telegram-betacode = {
wantedBy = ["multi-user.target"];
description = "Telegram beta code bot";

View File

@@ -0,0 +1,39 @@
{
pkgs,
config,
inputs,
lib,
...
}: let
hesychius = inputs.scripts.outPath + "/hesychius/hesychius.txt";
in {
niveum.bots.hesychius = {
enable = true;
time = "08:00";
mastodon = {
enable = true;
language = "el";
tokenFile = config.age.secrets.mastodon-token-hesychius.path;
};
telegram = {
enable = true;
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@HesychiosAlexandreus"];
};
command = "${pkgs.coreutils}/bin/shuf -n1 ${hesychius}";
};
systemd.timers.bot-hesychius.timerConfig.RandomizedDelaySec = "10h";
age.secrets = {
mastodon-token-hesychius.file = ../../secrets/mastodon-token-hesychius.age;
};
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

@@ -0,0 +1,38 @@
{
pkgs,
config,
lib,
niveumPackages,
...
}: {
niveum.bots.logotheca = {
enable = true;
time = "08/6:00";
telegram = {
enable = true;
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["-1001760262519"];
parseMode = "Markdown";
};
matrix = {
enable = true;
homeserver = "matrix.4d2.org";
tokenFile = config.age.secrets.matrix-token-lakai.path;
chatIds = [
"!zlwCuPiCNMSxDviFzA:4d2.org"
];
};
command = "${niveumPackages.literature-quote}/bin/literature-quote";
};
age.secrets = {
matrix-token-lakai.file = ../../secrets/matrix-token-lakai.age;
};
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

@@ -0,0 +1,31 @@
{
config,
pkgs,
niveumPackages,
...
}: {
niveum.bots.nietzsche = {
enable = true;
time = "08:00";
mastodon = {
enable = true;
tokenFile = config.age.secrets.mastodon-token-nietzsche.path;
language = "de";
};
command = toString (pkgs.writers.writeBash "random-nietzsche" ''
set -efu
random_number=$(( ($RANDOM % 10) + 1 ))
if [ "$random_number" -eq 1 ]; then
${niveumPackages.random-zeno}/bin/random-zeno "/Literatur/M/Nietzsche,+Friedrich"
else
${niveumPackages.random-zeno}/bin/random-zeno "/Philosophie/M/Nietzsche,+Friedrich"
fi
'');
};
systemd.timers.bot-nietzsche.timerConfig.RandomizedDelaySec = "10h";
age.secrets = {
mastodon-token-nietzsche.file = ../../secrets/mastodon-token-nietzsche.age;
};
}

View File

@@ -4,11 +4,19 @@
lib,
...
}: {
niveum.telegramBots.smyth = {
niveum.bots.smyth = {
enable = true;
time = "08:00";
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@HerbertWeirSmyth"];
mastodon = {
enable = true;
tokenFile = config.age.secrets.mastodon-token-smyth.path;
language = "en";
};
telegram = {
enable = true;
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@HerbertWeirSmyth"];
};
command = toString (pkgs.writers.writeDash "random-smyth" ''
set -efu
@@ -19,14 +27,21 @@
| ${pkgs.gnused}/bin/sed 's/^ref="//;s/"$//'
)
${pkgs.curl}/bin/curl -sSL http://www.perseus.tufts.edu/hopper/text?doc=$RANDOM_SECTION\
url="http://www.perseus.tufts.edu/hopper/text?doc=$RANDOM_SECTION"
${pkgs.curl}/bin/curl -sSL "$url"\
| ${pkgs.htmlq}/bin/htmlq '#text_main' \
| ${pkgs.gnused}/bin/sed 's/<\/\?hr>//g' \
| ${pkgs.pandoc}/bin/pandoc -f html -t plain --wrap=none
printf '\n%s\n\n#AncientGreek' "$url"
'');
};
systemd.timers.telegram-bot-smyth.timerConfig.RandomizedDelaySec = "10h";
systemd.timers.bot-smyth.timerConfig.RandomizedDelaySec = "10h";
age.secrets = {
mastodon-token-smyth.file = ../../secrets/mastodon-token-smyth.age;
};
niveum.passport.services = [
{

163
configs/bots/tlg-wotd.nix Normal file
View File

@@ -0,0 +1,163 @@
{
pkgs,
lib,
config,
niveumPackages,
...
}: let
mastodonEndpoint = "https://social.krebsco.de";
in {
systemd.services.bot-tlg-wotd = {
enable = true;
wants = ["network-online.target"];
startAt = "9:30";
path = [ pkgs.jq pkgs.curl pkgs.recode pkgs.deno pkgs.imagemagick pkgs.gawk pkgs.gnugrep pkgs.coreutils ];
environment = {
NPM_CONFIG_CACHE = "/tmp";
CLTK_DATA = "/tmp";
};
script = ''
set -efux
chat_id=@tlgwotd
export TELEGRAM_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/telegram-token")"
export MASTODON_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/mastodon-token")"
json_data=$(curl -sSL http://stephanus.tlg.uci.edu/Iris/Wotd | recode html..utf8)
word=$(echo "$json_data" | jq -r '.word')
compact_word=$(echo "$word" | sed 's/,.*$//')
definition=$(echo "$json_data" | jq -r '.definition | sub("<.*>"; "") | rtrimstr(" ")')
first_occurrence=$(echo "$json_data" | jq -r '.firstOccurrence')
total_occurrences=$(echo "$json_data" | jq -r '.totalOccurrences')
telegram_caption="*$word* $definition
First occurrence (century): $first_occurrence
Number of occurrences (in all Ancient Greek texts): $total_occurrences"
mastodon_caption="$word $definition
First occurrence (century): $first_occurrence
Number of occurrences (in all Ancient Greek texts): $total_occurrences"
#ancientgreek #classics #wotd #wordoftheday
transliteration=$(${pkgs.writers.makePythonWriter pkgs.python311 pkgs.python311Packages pkgs.python3Packages "translit.py" {
# revert to pkgs.writers.writePython3 once https://github.com/NixOS/nixpkgs/pull/353367 is merged
libraries = [ pkgs.python311Packages.cltk ];
} ''
import sys
from cltk.phonology.grc.transcription import Transcriber
probert = Transcriber("Attic", "Probert")
text = " ".join(sys.argv[1:])
ipa = probert.transcribe(text)
print(ipa)
''} "$compact_word")
photo_path=/tmp/output.png
hex_to_rgb() {
hex="$1"
r=$(printf "%d" "0x$(echo "$hex" | cut -c2-3)")
g=$(printf "%d" "0x$(echo "$hex" | cut -c4-5)")
b=$(printf "%d" "0x$(echo "$hex" | cut -c6-7)")
echo "$r $g $b"
}
calculate_luminance() {
r="$1"
g="$2"
b="$3"
r_l=$(echo "$r" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
g_l=$(echo "$g" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
b_l=$(echo "$b" | awk '{print ($1 / 255 <= 0.03928) ? $1 / 255 / 12.92 : (($1 / 255 + 0.055) / 1.055)^2.4}')
echo "$r_l $g_l $b_l" | awk '{print 0.2126*$1 + 0.7152*$2 + 0.0722*$3}'
}
hex_color="#$(echo "$compact_word" | md5sum | cut -c 1-6)"
if echo "$hex_color" | grep -qE '^#[0-9A-Fa-f]{6}$'; then
set -- $(hex_to_rgb "$hex_color")
r="$1"
g="$2"
b="$3"
fi
luminance=$(calculate_luminance "$r" "$g" "$b")
threshold="0.1"
echo "$r $g $b"
if [ "$(echo "$luminance" | awk -v threshold="$threshold" '{print ($1 > threshold)}')" -eq 1 ]; then
color1="black"
color2="#333"
else
color1="white"
color2=lightgrey
fi
magick -size 1400x846 \
xc:"$hex_color" \
-font "${pkgs.gentium}/share/fonts/truetype/GentiumBookPlus-Bold.ttf" \
-fill "$color1" \
-pointsize 150 -gravity west \
-annotate +100-160 "$compact_word" \
-font "${pkgs.gentium}/share/fonts/truetype/GentiumBookPlus-Regular.ttf" \
-fill "$color2" \
-pointsize 60 -gravity west \
-annotate +100+00 "$transliteration" \
-fill "$color1" \
-annotate +100+120 "$definition" \
-fill "$color2" \
-pointsize 40 -gravity southwest \
-annotate +100+60 "attested $total_occurrences times" \
-pointsize 40 -gravity southeast \
-annotate +100+60 "$(date -I)" \
"$photo_path"
curl -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendPhoto" \
-F "chat_id=\"$chat_id\"" \
-F "photo=@$photo_path" \
-F parse_mode=Markdown \
-F caption="$telegram_caption"
mastodon_upload_response=$(curl -X POST "${mastodonEndpoint}/api/v2/media" \
-H "Authorization: Bearer $MASTODON_TOKEN" \
-F "file=@$photo_path" \
-F "description=$word $definition")
mastodon_image_id=$(echo $mastodon_upload_response | jq -r .id)
curl -X POST "${mastodonEndpoint}/api/v1/statuses" \
-H "Authorization: Bearer $MASTODON_TOKEN" \
-d "status=$mastodon_caption" \
-d "visibility=public" \
-d "media_ids[]=$mastodon_image_id"
'';
serviceConfig = {
Type = "oneshot";
DynamicUser = true;
StateDirectory = "tlgwotd";
PrivateTmp = true;
LoadCredential = [
"telegram-token:${config.age.secrets.telegram-token-kmein.path}"
"mastodon-token:${config.age.secrets.mastodon-token-tlgwotd.path}"
];
};
};
age.secrets = {
telegram-token-kmein.file = ../../secrets/telegram-token-kmein.age;
mastodon-token-tlgwotd.file = ../../secrets/mastodon-token-tlgwotd.age;
};
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";
}
];
}

View File

@@ -41,18 +41,32 @@
'
'';
in {
niveum.telegramBots.transits = {
niveum.bots.transits = {
enable = true;
time = "*:0/1";
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["-1001796440545"];
mastodon = {
enable = true;
tokenFile = config.age.secrets.mastodon-token-transits.path;
};
telegram = {
enable = true;
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["-1001796440545"];
};
command = toString (pkgs.writers.writeDash "common-transits" ''
set -efu
now=$(${pkgs.coreutils}/bin/date +%_H:%M | ${pkgs.gnused}/bin/sed 's/^\s*//')
date=$(${pkgs.coreutils}/bin/date +'%m %d %Y')
{
${pkgs.astrolog}/bin/astrolog -qd $date -zN Berlin -Yt -Yd -d -R Uranus Neptune Pluto "North Node" -A 2
${pkgs.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" || :
(
cd ${pkgs.astrolog}/bin
# ./astrolog -Yt -Yd -q 10 22 1999 6:32 -zN Kassel -td $date -R Uranus Neptune Pluto "North Node"
./astrolog -qd $date -zN Berlin -Yt -Yd -d -R Uranus Neptune Pluto "North Node" -A 2
) | ${toSymbols} | ${pkgs.coreutils}/bin/sort -n | ${pkgs.gnugrep}/bin/grep "^$now" || :
'');
};
age.secrets = {
mastodon-token-transits.file = ../../secrets/mastodon-token-transits.age;
};
}

View File

@@ -1,28 +1,18 @@
{
pkgs,
config,
pkgs,
niveumPackages,
...
}: {
programs.chromium = {
enable = true;
extensions = [
# "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim
# "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
"pjjgklgkfeoeiebjogplpnibpfnffkng" # undistracted
"nhdogjmejiglipccpnnnanhbledajbpd" # vuejs devtools
"eimadpbcbfnmbkopoojfekhnkhdbieeh" # dark reader
];
};
environment.systemPackages = [
niveumPackages.cro
pkgs.tor-browser-bundle-bin
pkgs.firefox
];
home-manager.users.me = {
programs.firefox = {
enable = true;
package = pkgs.firefox.override {
cfg = {
enableTridactylNative = true;
};
};
profiles = let
defaultSettings = {
"beacon.enabled" = false;
@@ -91,7 +81,5 @@
};
};
environment.systemPackages = [pkgs.brave];
environment.variables.BROWSER = "brave";
environment.variables.BROWSER = "firefox";
}

View File

@@ -6,29 +6,46 @@
}: let
inherit (import ../lib) tmpfilesConfig;
in {
systemd.tmpfiles.rules = map tmpfilesConfig [
systemd.user.services.systemd-tmpfiles-clean = {
enable = true;
wantedBy = [ "default.target" ];
startAt = "daily";
script = "systemd-tmpfiles --user --clean";
serviceConfig = {
Type = "oneshot";
};
};
systemd.user.tmpfiles.users.me.rules = map tmpfilesConfig [
{
type = "d";
mode = "0755";
age = "7d";
path = "${config.users.users.me.home}/sync/Downloads";
}
{
type = "d";
mode = "0755";
age = "7d";
path = "${config.users.users.me.home}/cloud/nextcloud/tmp";
}
] ++ map (path: tmpfilesConfig {
type = "L+";
user = config.users.users.me.name;
group = "users";
group = config.users.users.me.group;
mode = "0755";
argument = "${config.users.users.me.home}/cloud/nextcloud/Uni";
path = "${config.users.users.me.home}/uni";
}
];
argument = "${config.users.users.me.home}/sync/${path}";
path = "${config.users.users.me.home}/${path}";
}) [".ssh" ".gnupg" ".pki" ".local/share/aerc"];
services.gnome.gnome-keyring.enable = true;
security.pam.services.lightdm.enableGnomeKeyring = true;
home-manager.users.me = {
services.gnome-keyring.enable = true;
services.nextcloud-client = {
enable = true;
startInBackground = true;
};
systemd.user.services.nextcloud-client = {
Unit = {
Wants = ["gnome-keyring.service"];
After = ["gnome-keyring.service"];
};
};
};
systemd.user.services.nextcloud-syncer = {
@@ -95,7 +112,7 @@ in {
mode = "400";
};
services.syncthing = rec {
services.syncthing = {
enable = true;
user = "kfm";
openDefaultPorts = true;
@@ -103,21 +120,22 @@ in {
dataDir = "/home/kfm/.config/syncthing";
cert = config.age.secrets.syncthing-cert.path;
key = config.age.secrets.syncthing-key.path;
inherit ((import ../lib).syncthing) devices;
folders = let
cloud-dir = "${config.users.users.me.home}/cloud";
in {
"${cloud-dir}/syncthing/zotero".devices = ["kabsa" "manakish"];
"${cloud-dir}/syncthing/common".devices = ["kabsa" "manakish"];
"${cloud-dir}/syncthing/library".devices = ["kabsa" "manakish" "heym"];
"${cloud-dir}/syncthing/mundoiu".devices = ["kabsa" "manakish" "heym"];
"${cloud-dir}/syncthing/obsidian" = {
devices = ["kabsa" "manakish" "heym"];
id = "3r1hu-3barr";
};
"${cloud-dir}/syncthing/music" = {
devices = ["kabsa" "manakish" "heym" "zaatar"];
id = "music";
settings = {
inherit ((import ../lib).syncthing) devices;
folders = {
"${config.users.users.me.home}/sync" = {
devices = ["kabsa" "manakish" "fatteh"];
label = "sync";
versioning.type = "trashcan";
versioning.params.cleanoutDays = 100;
};
"${config.users.users.me.home}/mobile" = {
devices = ["kabsa" "manakish" "fatteh" "kibbeh"];
id = "mobile";
label = "mobile";
versioning.type = "trashcan";
versioning.params.cleanoutDays = 100;
};
};
};
};

View File

@@ -3,18 +3,21 @@
lib,
config,
niveumPackages,
unstablePackages,
inputs,
...
}: let
}:
let
inherit (lib.strings) makeBinPath;
inherit (import ../lib) localAddresses kieran;
defaultApplications = (import ../lib).defaultApplications {inherit pkgs;};
in {
inherit (import ../lib) localAddresses kieran remoteDir;
defaultApplications = (import ../lib).defaultApplications { inherit pkgs; };
in
{
imports = [
inputs.self.nixosModules.system-dependent
inputs.self.nixosModules.power-action
{
boot.supportedFilesystems = ["ntfs"];
boot.supportedFilesystems = [ "ntfs" ];
}
{
nixpkgs = {
@@ -25,6 +28,8 @@ in {
};
permittedInsecurePackages = [
"qtwebkit-5.212.0-alpha4"
"zotero-6.0.26"
"electron-25.9.0"
];
};
};
@@ -60,19 +65,6 @@ in {
};
};
}
{
environment.systemPackages = [
pkgs.capitaine-cursors
];
home-manager.users.me = {
home.pointerCursor = {
name = "capitaine-cursors-white";
package = pkgs.capitaine-cursors;
size = 12;
};
};
}
{
users.mutableUsers = false;
@@ -81,11 +73,17 @@ in {
users.users.me = {
name = "kfm";
description = kieran.name;
passwordFile = config.age.secrets.kfm-password.path;
hashedPasswordFile = config.age.secrets.kfm-password.path;
isNormalUser = true;
uid = 1000;
extraGroups = [
"pipewire"
"audio"
];
};
nix.settings.trusted-users = [ config.users.users.me.name ];
age.secrets = {
kfm-password.file = ../secrets/kfm-password.age;
};
@@ -93,108 +91,74 @@ in {
home-manager.users.me.xdg.enable = true;
}
{
environment.interactiveShellInit = "export PATH=$PATH:$HOME/projects/niveum";
environment.shellAliases = let
wcd = pkgs.writers.writeDash "wcd" ''
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.."
'';
where = pkgs.writers.writeDash "where" ''
readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname
'';
take = pkgs.writers.writeDash "take" ''
mkdir "$1" && cd "$1"
'';
cdt = pkgs.writers.writeDash "cdt" ''
cd "$(mktemp -d)"
pwd
'';
swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}";
in {
"ß" = "${pkgs.util-linux}/bin/setsid";
cat = "${pkgs.bat}/bin/bat --theme=ansi --style=plain";
chromium-incognito = "chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito";
cp = "cp --interactive";
ip = "${pkgs.iproute2}/bin/ip -c";
l = "ls --color=auto --time-style=long-iso --almost-all";
ls = "ls --color=auto --time-style=long-iso";
ll = "ls --color=auto --time-style=long-iso -l";
la = "ls --color=auto --time-style=long-iso --almost-all -l";
mv = "mv --interactive";
nixi = "nix repl '<nixpkgs>'";
ns = "nix-shell --run zsh";
o = "${pkgs.xdg-utils}/bin/xdg-open";
pbcopy = "${pkgs.xclip}/bin/xclip -selection clipboard -in";
pbpaste = "${pkgs.xclip}/bin/xclip -selection clipboard -out";
rm = "rm --interactive";
s = "${pkgs.systemd}/bin/systemctl";
take = "source ${take}";
cdt = "source ${cdt}";
vit = "$EDITOR $(mktemp)";
tmux = "${pkgs.tmux}/bin/tmux -2";
sxiv = swallow "${pkgs.nsxiv}/bin/nsxiv";
zathura = swallow "${pkgs.zathura}/bin/zathura";
us = "${pkgs.systemd}/bin/systemctl --user";
wcd = "source ${wcd}";
im = "${pkgs.openssh}/bin/ssh weechat@makanek -t tmux attach-session -t IM";
where = "source ${where}";
yt = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -ic"; # Download video link
yta = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -xic"; # Download with audio
};
environment.interactiveShellInit = "export PATH=$PATH";
environment.shellAliases =
let
swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}";
in
{
o = "${pkgs.xdg-utils}/bin/xdg-open";
ns = "nix-shell --run zsh";
pbcopy = "${pkgs.xclip}/bin/xclip -selection clipboard -in";
pbpaste = "${pkgs.xclip}/bin/xclip -selection clipboard -out";
tmux = "${pkgs.tmux}/bin/tmux -2";
sxiv = swallow "${pkgs.nsxiv}/bin/nsxiv";
zathura = swallow "${pkgs.zathura}/bin/zathura";
im = "${pkgs.openssh}/bin/ssh weechat@makanek -t tmux attach-session -t IM";
yt = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata -ic"; # Download video link
yta = "${pkgs.yt-dlp}/bin/yt-dlp --add-metadata --audio-format opus --audio-quality 0 -xic"; # Download with audio
};
}
{
i18n = {
defaultLocale = "en_DK.UTF-8";
supportedLocales = ["all"];
supportedLocales = [ "all" ];
};
}
{
services.displayManager = {
autoLogin = {
enable = true;
user = config.users.users.me.name;
};
};
services.xserver = {
enable = true;
displayManager = {
autoLogin = {
enable = true;
user = config.users.users.me.name;
};
lightdm = {
enable = true;
greeters.gtk = {
enable = true;
indicators = ["~spacer" "~host" "~spacer" "~session" "~power"];
};
};
};
};
}
{
security.wrappers = {
pmount = {
setuid = true;
owner = "root";
group = "root";
source = "${pkgs.pmount}/bin/pmount";
};
pumount = {
setuid = true;
owner = "root";
group = "root";
source = "${pkgs.pmount}/bin/pumount";
};
};
}
{programs.command-not-found.enable = true;}
{
home-manager.users.me = {
services.gpg-agent = rec {
displayManager.lightdm = {
enable = true;
enableZshIntegration = true;
defaultCacheTtl = 2 * 60 * 60;
maxCacheTtl = 4 * defaultCacheTtl;
greeters.gtk = {
enable = true;
indicators = [
"~spacer"
"~host"
"~spacer"
"~session"
"~power"
];
};
};
};
}
{ programs.command-not-found.enable = true; }
{
programs.gnupg = {
agent = {
enable = true;
pinentryPackage = pkgs.pinentry-qt;
settings = rec {
default-cache-ttl = 2 * 60 * 60;
max-cache-ttl = 4 * default-cache-ttl;
};
};
};
environment.systemPackages = [
pkgs.gnupg
(pkgs.pass.withExtensions (e: [e.pass-otp e.pass-import e.pass-genphrase]))
(pkgs.pass.withExtensions (e: [
e.pass-otp
e.pass-import
e.pass-genphrase
]))
];
}
{
@@ -207,21 +171,20 @@ in {
};
}
{
networking.hosts =
lib.mapAttrs' (name: address: {
name = address;
value = ["${name}.local"];
})
localAddresses;
networking.hosts = lib.mapAttrs' (name: address: {
name = address;
value = [ "${name}.local" ];
}) localAddresses;
}
{
home-manager.users.me.home.stateVersion = "22.05";
home-manager.backupFileExtension = "bak";
}
{
systemd.user.services.udiskie = {
after = ["udisks2.service"];
wants = ["udisks2.service"];
wantedBy = ["graphical-session.target"];
after = [ "udisks2.service" ];
wants = [ "udisks2.service" ];
wantedBy = [ "graphical-session.target" ];
serviceConfig = {
ExecStart = "${pkgs.udiskie}/bin/udiskie --verbose --no-config --notify";
};
@@ -237,6 +200,7 @@ in {
};
}
./android.nix
./admin-essentials.nix
./stylix.nix
./alacritty.nix
./backup.nix
@@ -245,7 +209,7 @@ in {
./aerc.nix
./ccc.nix
./khal.nix
./chromium.nix
./browser.nix
./clipboard.nix
./cloud.nix
./direnv.nix
@@ -257,12 +221,14 @@ in {
./git.nix
./hledger.nix
./htop.nix
./hu-berlin.nix
./fu-berlin.nix
./fysi.nix
./i3.nix
./i3status-rust.nix
./keyboard.nix
./mycelium.nix
./kdeconnect.nix
{ home-manager.users.me.home.file.".XCompose".source = ../lib/keyboards/XCompose; }
{ services.upower.enable = true; }
./lb.nix
./mpv.nix
./mime.nix
@@ -270,11 +236,11 @@ in {
./nix.nix
./newsboat.nix
./flameshot.nix
./fritzbox.nix
./packages.nix
./picom.nix
./stardict.nix
./polkit.nix
./power-action.nix
./printing.nix
./redshift.nix
./retiolum.nix
@@ -288,9 +254,48 @@ in {
./unclutter.nix
./vscode.nix
./watson.nix
./wallpaper.nix
./zsh.nix
{
home-manager.users.me.home.file.".zshrc".text = ''
# nothing to see here
'';
}
./tor.nix
./stw-berlin.nix
./mastodon-bot.nix
{
fileSystems."${remoteDir}/fritz" = {
device = "//192.168.178.1/FRITZ.NAS/Backup";
fsType = "cifs";
options = [
"username=ftpuser"
"password=ftppassword"
"noauto"
"nounix"
"rw"
# "noserverino" # ref https://askubuntu.com/a/1265165
"uid=${toString config.users.users.me.uid}"
"gid=${toString config.users.groups.users.gid}"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
];
};
}
{
home-manager.users.me = {
xdg.userDirs = rec {
enable = true;
documents = "${config.users.users.me.home}/cloud/nextcloud/Documents";
desktop = "/tmp";
download = "${config.users.users.me.home}/sync/Downloads";
music = "${config.users.users.me.home}/mobile/audio";
pictures = "${config.users.users.me.home}/cloud/nextcloud/Bilder";
publicShare = "${config.users.users.me.home}/cloud/nextcloud/tmp";
videos = pictures;
};
};
}
];
}

View File

@@ -4,7 +4,18 @@
...
}: let
inherit (import ../lib) defaultApplications theme;
sgr = code: string: ''\u001b[${code}m${string}\u001b[0m'';
in {
environment.systemPackages = [
(pkgs.writers.writeDashBin "notifications" ''
${pkgs.dunst}/bin/dunstctl history \
| ${pkgs.jq}/bin/jq -r '
.data[]
| map("${sgr "90" ''\(.appname.data)''} ${sgr "1" ''\(.summary.data)''} ${sgr "31" ''\(.body.data | gsub("\n"; " | "))''}")
| join("\n")'
'')
];
home-manager.users.me.services.dunst = {
enable = true;
iconTheme = (theme pkgs).icon;

View File

@@ -10,7 +10,6 @@
autoCloseIdleDaemon = true;
drawColor = "#ff0000";
drawThickness = 2;
checkForUpdates = false;
showDesktopNotification = true;
disabledTrayIcon = true;
showHelp = false;

View File

@@ -22,7 +22,12 @@
egyptianHiero = zip-font "EgyptianHiero" {
url = "https://github.com/MKilani/Djehuty/archive/master.zip";
sha256 = "sha256-KbY4vedm757NWfDlgmNhslbZd+2Vs+o5PjtMMGDt61Y=";
sha256 = "sha256-S3vZxdeBj57KJsF+zaZw7sQw8T+z1aVC2CnpnZ0/x2c=";
};
brill = zip-font "Brill" {
url = "https://brill.com/fileasset/The_Brill_Typeface_Package_v_4_0.zip";
stripRoot = false;
hash = "sha256-ugmEIkeBzD/4C9wkVfbctEtnzI8Kw+YD6KGcbk4BAf4=";
};
antinoou = zip-font "Antinoou" {
url = "https://www.evertype.com/fonts/coptic/AntinoouFont.zip";
@@ -31,13 +36,9 @@
};
newGardiner = zip-font "NewGardiner" {
url = "https://mjn.host.cs.st-andrews.ac.uk/egyptian/fonts/NewGardiner.zip";
hash = "sha256-i7ZBN28no/884fYMA7ZJ47WpkwZXzY//TK0bDz21pE0=";
hash = "sha256-nP0y4ILt+0mlkDRdCNSeO2Gequ8wyix/qQdmujTNw3Y=";
stripRoot = false;
};
junicode2 = zip-font "JunicodeTwo" {
url = "https://github.com/psb1558/Junicode-font/archive/48bf476db278c844c67542b04d1e0e4c71f139d2.zip";
sha256 = "1ryicc155vkvgv3315ddliigwa01afwyb4c4f6pnqcns03af001i";
};
newAthenaUnicode = zip-font "NewAthenaUnicode" {
url = "https://classicalstudies.org/sites/default/files/userfiles/files/NAU5_005.zip";
sha256 = "1g7qk9gl4nq2dz41bvck1nzilhin44j8691cxax3dlp77bbn9bxr";
@@ -46,15 +47,27 @@
url = "http://files.qenherkhopeshef.org/jsesh/JSeshFont.ttf";
sha256 = "1203jrk2xzvgckcc5hx88kja1i3h8gm1wiyla5j6gspc0hbv56ry";
};
egyptianText = simple-ttf "EgyptianText-1.0beta" {
egyptianTextBeta = simple-ttf "EgyptianText-1.0beta" {
url = "http://c.krebsco.de/EgyptianText-v1.0-beta.ttf";
sha256 = "0cfjbk7xxnxhlp6v922psm5j1xzrv6wfk226ji2wz2yfrnkbcbsv";
};
coranica = simple-ttf "Coranica" {
url = "https://corpuscoranicum.de/fonts/coranica_1164.ttf";
sha256 = "0igi8q8b2p38x9jq8c98afsl7bf8rj32zj2052yyjgj9r88y4yi5";
};
koineGreek = simple-ttf "KoineGreek.ttf" {
url = "https://github.com/Center-for-New-Testament-Restoration/font/raw/af83eed50105344edaa5e5eddaf87696e271468c/KoineGreek.ttf";
hash = "sha256-YtC+nj7+Jl8k00rqAAqySYc8iTAOL7PixXc+LfSmnS0=";
};
egyptianText = simple-ttf "EgyptianText" {
url = "https://github.com/microsoft/font-tools/raw/1092cb23520967830001a0807eb21d6a44dda522/EgyptianOpenType/font/eot.ttf";
sha256 = "1n294vhcx90270pnsw1dbk6izd61fjvbnjrh4hcf98ff3s540x0c";
};
in {
fonts = {
enableDefaultFonts = true;
enableDefaultPackages = true;
fontDir.enable = true;
fonts = with pkgs; [
packages = with pkgs; [
alegreya
alegreya-sans
amiri
@@ -65,6 +78,7 @@ in {
charis-sil
doulos-sil
newAthenaUnicode
coranica
corefonts
crimson
eb-garamond
@@ -72,16 +86,19 @@ in {
jsesh
egyptianHiero
egyptianText
egyptianTextBeta
font-awesome_6
etBook
newGardiner
junicode2
junicode
koineGreek
brill
ezra-sil
fira
font-awesome
galatia-sil
gentium
niveumPackages.gfs-fonts
# niveumPackages.gfs-fonts
gyre-fonts
ibm-plex
jetbrains-mono
@@ -93,7 +110,7 @@ in {
roboto
roboto-mono
noto-fonts
noto-fonts-cjk
noto-fonts-cjk-sans
noto-fonts-emoji
roboto-slab
scheherazade-new
@@ -109,7 +126,7 @@ in {
fontconfig.defaultFonts = rec {
monospace = ["Noto Sans Mono"] ++ emoji;
serif = ["Noto Serif" "Noto Naskh Arabic" "Noto Serif Devanagari"];
sansSerif = ["Noto Sans Display" "Noto Naskh Arabic" "Noto Sans Devanagari" "Noto Sans CJK JP" "Noto Sans Coptic"];
sansSerif = ["Noto Sans Display" "Noto Naskh Arabic" "Noto Sans Hebrew" "Noto Sans Devanagari" "Noto Sans CJK JP" "Noto Sans Coptic" "Noto Sans Syriac Western"];
emoji = ["Noto Color Emoji"];
};
# xelatex fails with woff files

19
configs/fritzbox.nix Normal file
View File

@@ -0,0 +1,19 @@
{ config, ... }:
{
networking.firewall.allowedUDPPorts = [ 51820 ];
networking.wg-quick.interfaces.aether = {
autostart = false;
dns = ["192.168.178.1" "fritz.box"];
listenPort = 51820;
privateKeyFile = config.age.secrets.wireguard-aether-key.path;
peers = [
{
allowedIPs = ["192.168.178.0/24" "0.0.0.0/0"];
endpoint = "lng5gx2rmssv8ge1.myfritz.net:58997";
persistentKeepalive = 25;
presharedKeyFile = config.age.secrets.wireguard-aether-psk.path;
publicKey = "8Rr7BueC0CGmycBQFS7YM7VF7Adkdc1ZcLFy8YXyOQk=";
}
];
};
}

View File

@@ -5,10 +5,15 @@
...
}: let
username = "meinhak99";
inherit (import ../lib/email.nix) defaults;
inherit (import ../lib/email.nix) defaults pronouns;
inherit (import ../lib) remoteDir;
fu-defaults = rec {
imap.host = "mail.zedat.fu-berlin.de";
imap.port = 993;
imap.tls.enable = true;
smtp.host = imap.host;
smtp.port = 465;
smtp.tls.enable = true;
folders.drafts = "Entwürfe";
folders.sent = "Gesendet";
folders.trash = "Papierkorb";
@@ -33,21 +38,26 @@ in {
address = "kieran.meinhardt@fu-berlin.de";
aliases = ["${userName}@fu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhak99.path}";
});
};
};
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
signature = {
showSignature = "append";
text = ''
${defaults.realName}
${pronouns}
systemd.user.services.fu-blackboard-calendar = {
enable = true;
# startAt = "*:00/10";
after = ["vdirsyncer.service"];
wantedBy = ["default.target"];
script = ''
${pkgs.curl}/bin/curl $(cat ${config.age.secrets.blackboard-calendar-ics.path}) | ${pkgs.khal}/bin/khal import -
'';
serviceConfig = {
Type = "oneshot";
Restart = "on-failure";
---
Studentische Hilfskraft / ZODIAC
Freie Universität Berlin
Telefon: +49 30 838 58118
Arnimallee 10, Raum 106, 14195 Berlin
'';
};
himalaya = {
enable = true;
settings.backend = "imap";
};
});
};
};
@@ -58,16 +68,79 @@ in {
group = config.users.users.me.group;
mode = "400";
};
blackboard-calendar-ics = {
file = ../secrets/blackboard-calendar-ics.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
fu-sftp-key = {
file = ../secrets/fu-sftp-key.age;
owner = "root";
group = "root";
mode = "400";
};
};
# if it fails with "connection reset by peer" run `sudo sshfs ... ... -o ...` manually
# it needs to say 'yes' to the server's fingerprint
system.fsPackages = [ pkgs.sshfs ];
# https://www.zedat.fu-berlin.de/tip4u_157.pdf
fileSystems = let
fu-berlin-cifs-options = [
"uid=${toString config.users.users.me.uid}"
"gid=${toString config.users.groups.users.gid}"
"rw"
"nounix"
"domain=fu-berlin"
"noauto"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
];
firstCharacter = lib.strings.substring 0 1;
home-directory-mount = user: {
"${remoteDir}/fu/${user}/home" = {
device = "${user}@login.zedat.fu-berlin.de:/home/${firstCharacter user}/${user}";
fsType = "sshfs";
options = [
"allow_other"
"_netdev"
"x-systemd.automount"
"reconnect"
"ServerAliveInterval=15"
"IdentityFile=${config.age.secrets.fu-sftp-key.path}"
];
};
};
in {
"${remoteDir}/fu/zodiac" = {
device = "//trove.storage.fu-berlin.de/GESCHKULT";
fsType = "cifs";
options =
fu-berlin-cifs-options
++ [
"credentials=${config.age.secrets.cifs-credentials-zodiac.path}"
];
};
} // home-directory-mount "meinhak99"
// home-directory-mount "xm7234fu";
age.secrets = {
cifs-credentials-zodiac.file = ../secrets/cifs-credentials-zodiac.age;
};
environment.systemPackages = [
(pkgs.writers.writeDashBin "fu-vpn" ''
if ${pkgs.wirelesstools}/bin/iwgetid | ${pkgs.gnugrep}/bin/grep --invert-match eduroam
then
# root firefox will not open login window unless root owns Xauthority
sudo cp $XAUTHORITY /root/.Xauthority
sudo chown root: /root/.Xauthority
XAUTHORITY=/root/.Xauthority sudo ${pkgs.openconnect}/bin/openconnect vpn.fu-berlin.de --useragent=AnyConnect
fi
'')
];
systemd.services.fu-vpn = {
enable = true;
enable = false;
wants = ["network-online.target"];
serviceConfig.LoadCredential = "password:${config.age.secrets.email-password-meinhak99.path}";
script = ''

View File

@@ -1,7 +1,5 @@
{
pkgs,
config,
lib,
inputs,
...
}: let
@@ -9,17 +7,17 @@
in {
environment.systemPackages = [
pkgs.mr
pkgs.git
pkgs.gitFull
pkgs.git-crypt
pkgs.gitAndTools.gitflow
pkgs.gitAndTools.gh
pkgs.gitAndTools.git-extras
pkgs.gitAndTools.git-trim
pkgs.gitAndTools.git-absorb
pkgs.gitflow
pkgs.gh
pkgs.git-extras
# pkgs.git-trim
pkgs.git-absorb
pkgs.gitstats
pkgs.patch
pkgs.patchutils
inputs.self.packages.x86_64-linux.git-preview
inputs.self.packages.${pkgs.system}.git-preview
];
environment.shellAliases = {
@@ -30,7 +28,7 @@ in {
home-manager.users.me = {
programs.git = {
enable = true;
package = pkgs.gitAndTools.gitFull;
package = pkgs.gitFull;
userName = kieran.name;
userEmail = kieran.email;
aliases = {

5
configs/gnome.nix Normal file
View File

@@ -0,0 +1,5 @@
{
services.xserver.enable = true;
services.xserver.displayManager.lightdm.enable = true;
services.xserver.desktopManager.gnome.enable = true;
}

View File

@@ -1,28 +1,15 @@
{
config,
pkgs,
...
}: {
}: let
ledgerDirectory = "/home/kfm/sync/src/ledger";
hora = pkgs.callPackage ../packages/hora.nix { timeLedger = "${ledgerDirectory}/time.timeclock"; };
in {
environment.systemPackages = let
ledgerDirectory = "$HOME/projects/ledger";
timeLedger = "${ledgerDirectory}/time.timeclock";
git = "${pkgs.git}/bin/git -C ${ledgerDirectory}";
in [
hora
pkgs.hledger
(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)-01 last month" +%Y-%m-%d)" \
-e "$(date -d "$(date +%Y-%m)-01" +%Y-%m-%d)" \
| sed 's/(fillidefilla:\(.*\))/\1/g' \
| xsv select date,amount,total,account,description
'')
(pkgs.writers.writeDashBin "hledger-git" ''
if [ "$1" = entry ]; then
${pkgs.hledger}/bin/hledger balance -V > "${ledgerDirectory}/balance.txt"

View File

@@ -1,200 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
inherit (import ../lib/email.nix) defaults;
hu-defaults = {
imap.host = "mailbox.cms.hu-berlin.de";
imap.port = 993;
smtp.host = "mailhost.cms.hu-berlin.de";
smtp.port = 25;
smtp.tls.useStartTls = true;
};
hu-berlin-cifs-options = [
"uid=${toString config.users.users.me.uid}"
"gid=${toString config.users.groups.users.gid}"
"sec=ntlmv2"
"workgroup=german"
"credentials=${config.age.secrets.cifs-credentials-hu-berlin.path}"
"noauto"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
];
in {
fileSystems."/media/hu-berlin/germpro2" = {
device = "//hugerm31c.user.hu-berlin.de/germpro2/ling";
fsType = "cifs";
options = hu-berlin-cifs-options;
};
fileSystems."/media/hu-berlin/germhome" = {
device = "//hugerm31c.user.hu-berlin.de/germhome/ling/meinhaki";
fsType = "cifs";
options = hu-berlin-cifs-options;
};
age.secrets = {
cifs-credentials-hu-berlin.file = ../secrets/cifs-credentials-hu-berlin.age;
email-password-meinhark = {
file = ../secrets/email-password-meinhark.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-meinhaki = {
file = ../secrets/email-password-meinhaki.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-dslalewa = {
file = ../secrets/email-password-dslalewa.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
email-password-fsklassp = {
file = ../secrets/email-password-fsklassp.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
home-manager.users.me = {
programs.ssh = {
matchBlocks = {
"gruenau6.informatik.hu-berlin.de" = {
hostname = "gruenau6.informatik.hu-berlin.de";
user = "meinhark";
setEnv.TERM = "xterm";
};
"alew.hu-berlin.de" = {
user = "centos";
hostname = "141.20.187.219";
};
};
};
accounts.email.accounts = rec {
hu-student =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhark";
address = "kieran.felix.meinhardt@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhark.path}";
});
hu-student-cs =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhark";
address = "kieran.felix.meinhardt@informatik.hu-berlin.de";
aliases = ["${userName}@informatik.hu-berlin.de"];
imap.host = "mailbox.informatik.hu-berlin.de";
smtp.host = "mailhost.informatik.hu-berlin.de";
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhark.path}";
});
hu-employee =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "meinhaki";
address = "kieran.meinhardt@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhaki.path}";
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
signature = {
showSignature = "append";
text = ''
${defaults.realName}
Studentische Hilfskraft / Administrator ALEW
Humboldt-Universität zu Berlin
Telefon: +49 (0)30 2093 9634
Raum 3.212, Dorotheenstraße 24, 10117 Berlin-Mitte
https://alew.hu-berlin.de
'';
};
});
hu-admin =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "dslalewa";
address = "admin.alew.vglsprwi@hu-berlin.de";
aliases = ["${userName}@hu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-dslalewa.path}";
inherit (hu-employee) signature;
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
});
hu-fsi =
lib.recursiveUpdate defaults
(lib.recursiveUpdate hu-defaults
rec {
userName = "fsklassp";
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-fsklassp.path}";
address = "${userName}@hu-berlin.de";
realName = "FSI Klassische Philologie";
aerc.extraAccounts.signature-file = toString (pkgs.writeText "signature" signature.text);
signature = {
showSignature = "append";
text = ''
Fachschafts-Initiative
Humboldt-Universität zu Berlin
Sprach- und literaturwissenschaftliche Fakultät
Institut für klassische Philologie
Unter den Linden 6
10099 Berlin
'';
};
});
};
};
environment.systemPackages = [
(pkgs.writers.writeDashBin "hu-ip" ''
${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3
'')
(
pkgs.writers.writePython3Bin "hu-eduroam-install"
{
libraries = with pkgs.python3Packages; [distro pyopenssl dbus-python];
flakeIgnore = ["E501" "E123" "W504" "E722" "F821" "E226" "E126" "E265" "W291"];
}
(builtins.readFile (builtins.fetchurl {
url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/linux-installer/eduroam-linux-hub.py";
sha256 = "19x2kvwxx13265b2hj5fjf53g0liw6dw7xf9j9cav67cswmz60kf";
}))
)
];
# ref https://github.com/NixOS/nixpkgs/issues/231038#issuecomment-1591888919
environment.etc."ppp/options".text = "ipcp-accept-remote";
systemd.services.hu-vpn = {
enable = true;
wants = ["network-online.target"];
serviceConfig.LoadCredential = "password:${config.age.secrets.email-password-meinhark.path}";
script = ''
if ${pkgs.wirelesstools}/bin/iwgetid | ${pkgs.gnugrep}/bin/grep --invert-match eduroam
then
${pkgs.openfortivpn}/bin/openfortivpn \
--password="$(cat "$CREDENTIALS_DIRECTORY/password")" \
--config=${
pkgs.writeText "hu-berlin.config" ''
host = forti-ssl.vpn.hu-berlin.de
port = 443
username = meinhark
''
}
fi
'';
};
}

View File

@@ -5,31 +5,37 @@
niveumPackages,
...
}: let
dashboard = pkgs.writers.writeDashBin "dashboard" ''
${pkgs.alacritty}/bin/alacritty --option font.size=4 --class dashboard --command ${pkgs.writers.writeDash "dashboard-inner" ''
exec ${pkgs.procps}/bin/watch -c -n 10 ${niveumPackages.q}/bin/q
''}
'';
inherit (import ../lib) defaultApplications;
klem = niveumPackages.klem.override {
config.dmenu = "${pkgs.dmenu}/bin/dmenu -i -p klem";
config.scripts = {
"p.r" = pkgs.writers.writeDash "p.r" ''
"p.r paste" = pkgs.writers.writeDash "p.r" ''
${pkgs.curl}/bin/curl -fSs http://p.r --data-binary @- \
| ${pkgs.coreutils}/bin/tail --lines=1 \
| ${pkgs.gnused}/bin/sed 's/\\<r\\>/krebsco.de/'
'';
# "envs.sh host" = pkgs.writers.writeDash "envs-host" ''
# ${pkgs.curl}/bin/curl -F "file=$(${pkgs.coreutils}/bin/cat)" https://envs.sh
# '';
"envs.sh mirror" = pkgs.writers.writeDash "envs-mirror" ''
${pkgs.curl}/bin/curl -F "url=$(${pkgs.coreutils}/bin/cat)" https://envs.sh
"envs.sh paste" = pkgs.writers.writeDash "envs-host" ''
${pkgs.curl}/bin/curl -F "file=@-" https://envs.sh
'';
# this segfaults
# "envs.sh mirror" = pkgs.writers.writeDash "envs-mirror" ''
# ${pkgs.curl}/bin/curl -F "url=$(${pkgs.coreutils}/bin/cat)" https://envs.sh
# '';
"envs.sh shorten" = pkgs.writers.writeDash "envs-shorten" ''
${pkgs.curl}/bin/curl -F "shorten=$(${pkgs.coreutils}/bin/cat)" https://envs.sh
'';
"ix.io" = pkgs.writers.writeDash "ix.io" ''
${pkgs.curl}/bin/curl -fSs -F 'f:1=<-' ix.io
'';
"go.r" = pkgs.writers.writeDash "go.r" ''
"go.r shorten" = pkgs.writers.writeDash "go.r" ''
${pkgs.curl}/bin/curl -fSs http://go.r -F "uri=$(${pkgs.coreutils}/bin/cat)"
'';
"0x0.st" = pkgs.writers.writeDash "0x0.st" ''
"4d2.org paste" = pkgs.writers.writeDash "4d2-paste" ''
${pkgs.curl}/bin/curl -F "file=@-" https://depot.4d2.org/
'';
"0x0.st shorten" = pkgs.writers.writeDash "0x0.st" ''
${pkgs.curl}/bin/curl -fSs https://0x0.st -F "shorten=$(${pkgs.coreutils}/bin/cat)"
'';
"rot13" = pkgs.writers.writeDash "rot13" ''
@@ -50,18 +56,14 @@
emojai = pkgs.writers.writeDash "emojai" ''
${pkgs.curl}/bin/curl https://www.emojai.app/api/generate -X POST -H 'Content-Type: application/json' --data-raw "$(${pkgs.jq}/bin/jq -sR '{emoji:.}')" | ${pkgs.jq}/bin/jq -r .result
'';
gpt = pkgs.writers.writeDash "gpt" ''
${niveumPackages.gpt}/bin/gpt
"gpt-3.5" = pkgs.writers.writeDash "gpt" ''
${niveumPackages.gpt35}/bin/gpt
'';
gpt-4 = pkgs.writers.writeDash "gpt" ''
${niveumPackages.gpt4}/bin/gpt
'';
};
};
new-workspace = pkgs.writers.writeDash "new-workspace" ''
i3-msg workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
'';
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))
'';
in {
age.secrets = {
github-token-i3status-rust = {
@@ -76,12 +78,20 @@ in {
group = config.users.users.me.group;
mode = "400";
};
miniflux-api-token = {
file = ../secrets/miniflux-api-token.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
programs.slock.enable = true;
environment.systemPackages = [dashboard];
services.displayManager.defaultSession = "none+i3";
services.xserver = {
displayManager.defaultSession = "none+i3";
windowManager.i3 = {
enable = true;
package = pkgs.i3-gaps;
@@ -103,83 +113,84 @@ in {
'';
};
home-manager.users.me.xsession.windowManager.i3 = let
home-manager.users.me = let
modifier = "Mod4";
in {
enable = true;
extraConfig = ''
bindsym --release ${modifier}+Shift+w exec /run/wrappers/bin/slock
'';
config = rec {
inherit modifier;
window = {
titlebar = false;
border = 2;
hideEdgeBorders = "smart";
commands = [
{
criteria = {class = "floating";};
command = "floating enable";
}
{
criteria = {class = "fzfmenu";};
command = "floating enable";
}
{
criteria = {class = ".*";};
command = "border pixel 2";
}
{
criteria = {class = "mpv";};
command = lib.strings.concatStringsSep ", " [
"floating enable"
"sticky enable"
"fullscreen disable"
"resize set 640 480"
"move position mouse"
];
}
];
};
gaps.inner = 4;
floating = {
titlebar = false;
border = 1;
};
bars = [
(config.home-manager.users.me.lib.stylix.i3.bar
// rec {
workspaceButtons = false;
mode = "dock"; # "hide";
position = "bottom";
statusCommand = toString (pkgs.writers.writeDash "i3status-rust" ''
export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})"
export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
${config.home-manager.users.me.programs.i3status-rust.package}/bin/i3status-rs ${config.home-manager.users.me.home.homeDirectory}/.config/i3status-rust/config-${position}.toml
'');
fonts = {
names = ["${config.stylix.fonts.sansSerif.name}" "FontAwesome 6 Free"];
size = config.stylix.fonts.sizes.desktop * 0.8;
};
})
infoWorkspace = "";
messageWorkspace = "";
modes.resize = {
"Escape" = ''mode "default"'';
"Return" = ''mode "default"'';
"h" = "resize shrink width 10 px or 5 ppt";
"j" = "resize grow height 10 px or 5 ppt";
"k" = "resize shrink height 10 px or 5 ppt";
"l" = "resize grow width 10 px or 5 ppt";
};
gaps.inner = 4;
floating = {
titlebar = false;
border = 1;
};
bars = [
(config.home-manager.users.me.lib.stylix.i3.bar
// rec {
workspaceButtons = true;
mode = "hide"; # "dock";
position = "bottom";
statusCommand = toString (pkgs.writers.writeDash "i3status-rust" ''
export I3RS_GITHUB_TOKEN="$(cat ${config.age.secrets.github-token-i3status-rust.path})"
export OPENWEATHERMAP_API_KEY="$(cat ${config.age.secrets.openweathermap-api-key.path})"
exec ${config.home-manager.users.me.programs.i3status-rust.package}/bin/i3status-rs ${config.home-manager.users.me.home.homeDirectory}/.config/i3status-rust/config-${position}.toml
'');
fonts = {
names = ["${config.stylix.fonts.sansSerif.name}" "FontAwesome 6 Free"];
size = config.stylix.fonts.sizes.desktop * 0.8;
};
})
];
window = {
titlebar = false;
border = 2;
hideEdgeBorders = "smart";
commands = [
{
criteria = {class = "floating";};
command = "floating enable";
}
{
criteria = {class = "fzfmenu";};
command = "floating enable";
}
{
criteria = {class = ".*";};
command = "border pixel 2";
}
{
criteria = {class = "mpv";};
command = lib.strings.concatStringsSep ", " [
"floating enable"
"sticky enable"
"fullscreen disable"
"resize set 640 480"
"move position mouse"
];
}
];
colors = let
background = config.lib.stylix.colors.withHashtag.base00;
in {
unfocused = {
border = lib.mkForce background;
childBorder = lib.mkForce background;
};
};
colors = let
background = config.lib.stylix.colors.withHashtag.base00;
in {
unfocused = {
border = lib.mkForce background;
childBorder = lib.mkForce background;
};
modes.resize = {
"Escape" = ''mode "default"'';
"Return" = ''mode "default"'';
"h" = "resize shrink width 10 px or 5 ppt";
"j" = "resize grow height 10 px or 5 ppt";
"k" = "resize shrink height 10 px or 5 ppt";
"l" = "resize grow width 10 px or 5 ppt";
};
keybindings = {
};
keybindings =
lib.listToAttrs (map (x: lib.nameValuePair "${modifier}+Shift+${toString x}" "move container to workspace ${toString x}") (lib.range 1 9))
// lib.listToAttrs (map (x: lib.nameValuePair "${modifier}+${toString x}" "workspace ${toString x}") (lib.range 1 9))
// {
"${modifier}+i" = "workspace ${infoWorkspace}";
"${modifier}+m" = "workspace ${messageWorkspace}";
"${modifier}+Shift+h" = "move left 25 px";
"${modifier}+Shift+j" = "move down 25 px";
"${modifier}+Shift+k" = "move up 25 px";
@@ -189,12 +200,10 @@ in {
"${modifier}+k" = "focus up";
"${modifier}+l" = "focus right";
"${modifier}+Shift+b" = "move window to workspace prev";
"${modifier}+Shift+n" = "move window to workspace next";
"${modifier}+Shift+x" = "exec ${move-to-new-workspace}";
"${modifier}+b" = "workspace prev";
"${modifier}+n" = "workspace next";
"${modifier}+x" = "exec ${new-workspace}";
# "${modifier}+Shift+b" = "move container to workspace prev";
# "${modifier}+Shift+n" = "move container to workspace next";
# "${modifier}+b" = "workspace prev";
# "${modifier}+n" = "workspace next";
"${modifier}+Shift+c" = "reload";
"${modifier}+Shift+q" = "kill";
@@ -203,8 +212,9 @@ in {
"${modifier}+z" = "sticky toggle";
"${modifier}+Shift+z" = "floating toggle";
"${modifier}+s" = "scratchpad show";
"${modifier}+Shift+s" = "move scratchpad";
"${modifier}+s" = ''[class="^(?i)(?!obsidian).*"] scratchpad show'';
"${modifier}+o" = ''[class="obsidian"] scratchpad show'';
"${modifier}+c" = "split h";
"${modifier}+e" = "layout toggle split";
@@ -217,15 +227,14 @@ in {
"${modifier}+Return" = "exec ${(defaultApplications pkgs).terminal}";
"${modifier}+t" = "exec ${(defaultApplications pkgs).fileManager}";
"${modifier}+y" = "exec ${(defaultApplications pkgs).browser}";
"${modifier}+0" = "exec ${niveumPackages.menu-calc}/bin/=";
"${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec rofi -modi run,ssh,window -show run''}";
"${modifier}+Shift+d" = "exec ${niveumPackages.notemenu}/bin/notemenu";
"${modifier}+p" = "exec rofi-pass";
"${modifier}+Shift+p" = "exec rofi-pass --insert";
"${modifier}+u" = "exec ${niveumPackages.unicodmenu}/bin/unicodmenu";
"${modifier}+Shift+u" = "exec ${pkgs.writers.writeDash "last-unicode" ''${pkgs.xdotool}/bin/xdotool type --delay 1000 "$(${pkgs.gawk}/bin/awk 'END{print $1}' ~/.cache/unicodmenu)"''}";
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
"${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" ''
if ${pkgs.procps}/bin/pgrep screenkey; then
exec ${pkgs.procps}/bin/pkill screenkey
@@ -233,25 +242,18 @@ in {
exec ${pkgs.screenkey}/bin/screenkey
fi
''}";
"${modifier}+F8" = "exec switch-theme toggle";
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";
"${modifier}+F12" = "exec ${klem}/bin/klem";
"Print" = "exec flameshot gui";
"XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer -d 5";
"XF86AudioMute" = "exec ${pkgs.pamixer}/bin/pamixer -t";
"XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer -i 5";
"XF86Calculator" = "exec ${pkgs.st}/bin/st -c floating -e ${pkgs.bc}/bin/bc";
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl pause";
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop";
"XF86ScreenSaver" = "exec ${niveumPackages.k-lock}/bin/k-lock";
"XF86Display" = "exec ${niveumPackages.dmenu-randr}/bin/dmenu-randr";
# key names detected with xorg.xev:
# XF86WakeUp (fn twice)
# XF86Battery (fn f3)
@@ -266,6 +268,74 @@ in {
# XF86Back
# XF86Launch1 (thinkvantage)
};
in {
wayland.windowManager.sway = {
enable = true;
config = {
menu = "rofi -modi run,ssh,window -show run";
inherit modifier modes gaps bars floating window colors keybindings;
input = {
"*" = {
xkb_layout = "de";
xkb_variant = "T3";
};
};
terminal = (defaultApplications pkgs).terminal;
up = "k";
down = "j";
left = "h";
right = "l";
seat = {
"*" = {
hide_cursor = "when-typing enable";
};
};
startup = [
{command = "echo hello";}
];
};
};
xsession.windowManager.i3 = {
enable = true;
extraConfig = ''
bindsym --release ${modifier}+Shift+w exec /run/wrappers/bin/slock
exec "${pkgs.obsidian}/bin/obsidian"
for_window [class="obsidian"] , move scratchpad
assign [class="message"] ${messageWorkspace}
exec "${pkgs.writers.writeDash "irc" "exec ${pkgs.alacritty}/bin/alacritty --class message -e ssh weechat@makanek -t tmux attach-session -t IM"}"
exec "${pkgs.writers.writeDash "email" "exec ${pkgs.alacritty}/bin/alacritty --class message -e aerc"}"
assign [class="dashboard"] ${infoWorkspace}
exec ${dashboard}/bin/dashboard
'';
config = lib.mkMerge [
{
inherit modifier gaps modes bars floating window colors keybindings;
}
{
keybindings = let
new-workspace = pkgs.writers.writeDash "new-workspace" ''
i3-msg workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
'';
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))
'';
in {
"${modifier}+ß" = "exec ${niveumPackages.menu-calc}/bin/=";
"${modifier}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";
"Print" = "exec flameshot gui";
# "${modifier}+Shift+x" = "exec ${move-to-new-workspace}";
# "${modifier}+x" = "exec ${new-workspace}";
"XF86Display" = "exec ${niveumPackages.dmenu-randr}/bin/dmenu-randr";
};
}
];
};
};
}

View File

@@ -3,6 +3,15 @@
config,
...
}: {
age.secrets = {
miniflux-api-token = {
file = ../secrets/miniflux-api-token.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
home-manager.users.me = {
programs.i3status-rust = {
enable = true;
@@ -28,81 +37,9 @@
};
blocks = [
{
block = "weather";
autolocate = true;
format = "$icon $location: $temp";
service = {
name = "openweathermap";
city_id = "2950159";
units = "metric";
};
}
{
block = "custom";
interval = 60 * 5;
command = let
spacetime = import ../configs/spacetime.nix;
in
pkgs.writers.writePython3 "sun.py" {
libraries = [pkgs.python3Packages.astral];
flakeIgnore = ["E121" "E501"];
}
''
import astral
import astral.moon
import astral.sun
current_phase = astral.moon.phase()
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" "team_mention" "manual" "invitation" "assign" "subscribed"];
}
{
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;
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: "bell"
}'
'';
json = true;
hide_when_empty = true;
block = "music";
format = "{$icon $combo $play |}";
separator = " ";
}
{
block = "net";
@@ -116,14 +53,11 @@
missing_format = "";
device = "tun0";
}
{
block = "net";
device = config.niveum.wirelessInterface;
format = "$icon $ssid $signal_strength";
}
{
block = "battery";
device = config.niveum.batteryName;
format = "$icon $percentage $time";
device = "DisplayDevice";
driver = "upower";
}
{
block = "sound";
@@ -138,35 +72,8 @@
}
{block = "load";}
{
block = "custom";
interval = 10;
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
)
}'
'';
block = "time";
format = "$icon $timestamp.datetime(f:'%Y-%m-%d (%W %a) %H:%M', l:de_DE)";
}
];
};

View File

@@ -3,67 +3,68 @@
lib,
...
}: let
commaSep = builtins.concatStringsSep ",";
xkbOptions = ["compose:caps" "terminate:ctrl_alt_bksp" "grp:ctrls_toggle"];
languages = {
de = "T3";
gr = "polytonic";
ru = "phonetic";
ara = "buckwalter";
cop = "";
ave = "";
got = "";
"in" = "san-kagapa";
il = "phonetic";
deutsch = { code = "de"; variant = "T3"; };
greek = { code = "gr"; variant = "polytonic"; };
russian = { code = "ru"; variant = "phonetic"; };
arabic = { code = "ara"; variant = "buckwalter"; }; # ../lib/keyboards/arabic;
coptic = ../lib/keyboards/coptic;
avestan = ../lib/keyboards/avestan;
gothic = ../lib/keyboards/gothic;
farsi = { code = "ir"; variant = "qwerty"; };
syriac = { code = "sy"; variant = "syc_phonetic"; };
sanskrit = { code = "in"; variant = "san-kagapa"; };
gujarati = {code = "in"; variant = "guj-kagapa"; };
urdu = {code = "in"; variant = "urd-phonetic"; };
hebrew = {code = "il"; variant = "phonetic";};
};
defaultLanguage = "de";
defaultLanguage = languages.deutsch;
in {
services.libinput.enable = true;
# man 7 xkeyboard-config
services.xserver = {
layout = "de";
exportConfiguration = true; # link /usr/share/X11 properly
xkb.layout = defaultLanguage.code;
# 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 = commaSep xkbOptions;
libinput.enable = true;
xkbDir = pkgs.symlinkJoin {
xkb.variant = defaultLanguage.variant;
xkb.options = commaSep xkbOptions;
xkb.dir = pkgs.symlinkJoin {
name = "x-keyboard-directory";
paths = [
"${pkgs.xkeyboard_config}/etc/X11/xkb"
(pkgs.linkFarm "custom-x-keyboards" [
{
name = "symbols/cop";
path = pkgs.fetchurl {
url = "http://www.moheb.de/download/cop";
sha256 = "1l0h6aq536hyinrh0i0ia355y229bjrlibii0sya5bmqh46vycia";
};
}
{
name = "symbols/got";
path = pkgs.fetchurl {
url = "https://c.krebsco.de/got";
sha256 = "1i0jxghxi3rldlijw6gm2xawrv7f0pmm7a5cqbzzgjrg7ldk46gd";
};
}
{
name = "symbols/ave";
path = pkgs.fetchurl {
url = "https://blog.simos.info/wp-content/uploads/2010/06/avestan.txt";
sha256 = "192zmmm3gxyhim39dsax7r87gsay2w5v2xkhwmvsfipjb60hwp5g";
};
}
])
(pkgs.linkFarm "custom-x-keyboards" (
lib.mapAttrsToList (name: value: {
name = "symbols/${name}";
path = value;
}) (lib.filterAttrs (_: value: !(value ? "code")) languages) ++ [
{
name = "symbols/ir";
path = ../lib/keyboards/farsi;
}
]
))
];
};
};
environment.etc."x11-locale".source = toString pkgs.xorg.libX11 + "share/X11/locale";
console.keyMap = "de";
environment.systemPackages =
lib.mapAttrsToList
(language: variant:
(language: settings:
let
code = if settings ? "code" then settings.code else language;
variant = if settings ? "variant" then settings.variant else "";
in
pkgs.writers.writeDashBin "kb-${language}" ''
${pkgs.xorg.setxkbmap}/bin/setxkbmap ${defaultLanguage},${language} ${languages.${defaultLanguage}},${variant} ${toString (map (option: "-option ${option}") xkbOptions)}
${pkgs.xorg.setxkbmap}/bin/setxkbmap ${defaultLanguage.code},${code} ${defaultLanguage.variant},${variant} ${toString (map (option: "-option ${option}") xkbOptions)}
'')
languages;

View File

@@ -103,34 +103,9 @@ in {
"khal/config".text = ''
[calendars]
[[alew]]
path = ${davHome}/calendar/alew
color = "light gray"
[[personal]]
path = ${davHome}/calendar/personal
color = "light cyan"
[[krebs]]
path = ${davHome}/calendar/krebs
color = "light red"
[[uni]]
path = ${davHome}/calendar/uni-1
color = "yellow"
[[fysi]]
path = ${davHome}/calendar/fysi-1
color = "light magenta"
[[fysi_team]]
path = ${davHome}/calendar/personal_shared_by_fdf
color = "light red"
[[birthdays]]
path = ${davHome}/contacts/contacts
type = birthdays
color = "light green"
[[kalender_local]]
path = ${davHome}/calendar/*
type = discover
[default]
highlight_event_days = True
@@ -162,19 +137,7 @@ in {
[pair kalender]
a = "kalender_local"
b = "kalender_cloud"
collections = ["personal", "alew", "uni-1"]
conflict_resolution = "b wins"
[pair krebs]
a = "kalender_local"
b = "krebs_cloud"
collections = ["3edef929-d509-7944-2440-000a54f2d054"]
conflict_resolution = "b wins"
[pair fysi]
a = "kalender_local"
b = "fysi_cloud"
collections = ["fysi-1", "personal_shared_by_fdf"]
collections = ["from b"]
conflict_resolution = "b wins"
[storage kontakte_local]
@@ -198,18 +161,6 @@ in {
url = "${kmeinCloud.davEndpoint}/calendars/${kmeinCloud.username}/"
username = "${kmeinCloud.username}"
password.fetch = ["command", "cat", "${kmeinCloud.passwordFile}"]
[storage krebs_cloud]
type = "caldav"
url = "http://calendar.r/krebs/"
username = "krebs"
password = "krebs"
[storage fysi_cloud]
type = "caldav"
url = "${fysiCloud.davEndpoint}/calendars/${fysiCloud.username}/"
username = "${fysiCloud.username}"
password.fetch = ["command", "cat", "${fysiCloud.passwordFile}"]
'';
};
};

View File

@@ -2,6 +2,13 @@
home-manager.users.me = {
xdg.mimeApps = {
enable = true;
associations = {
added = {
"x-scheme-handler/tg" = "org.telegram.desktop.desktop";
};
removed = {
};
};
defaultApplications = {
"application/epub+zip" = "org.pwmt.zathura.desktop";
"application/pdf" = "org.pwmt.zathura.desktop";
@@ -19,7 +26,7 @@
"x-scheme-handler/mailto" = "firefox.desktop";
"x-scheme-handler/unknown" = "firefox.desktop";
"x-scheme-handler/webcal" = "firefox.desktop";
"inode/directory" = "pcmanfm.desktop";
"x-scheme-handler/tg" = "org.telegram.desktop.desktop";
};
};
};

View File

@@ -36,7 +36,7 @@ in {
"Alt+j" = "add video-pan-y -0.05";
};
scripts = [
pkgs.mpvScripts.youtube-quality
pkgs.mpvScripts.quality-menu
niveumPackages.mpv-visualizer
];
};

15
configs/mycelium.nix Normal file
View File

@@ -0,0 +1,15 @@
{ lib, ... }:
let
myceliumAddresses = import ../lib/mycelium-network.nix;
in
{
services.mycelium = {
enable = true;
openFirewall = true;
};
networking.hosts = lib.mapAttrs' (name: address: {
name = address;
value = [ "${name}.m" ];
}) myceliumAddresses;
}

View File

@@ -1,6 +1,7 @@
{
pkgs,
niveumPackages,
config,
...
}: {
environment.variables.EDITOR = pkgs.lib.mkForce "nvim";
@@ -35,6 +36,23 @@
environment.systemPackages = [
(pkgs.writers.writeDashBin "vim" ''neovim "$@"'')
niveumPackages.vim
(niveumPackages.vim.override {
stylixColors = config.lib.stylix.colors;
colorscheme = "base16-gruvbox-light-medium";
})
# language servers
pkgs.pyright
pkgs.haskellPackages.haskell-language-server
pkgs.texlab
pkgs.nil
pkgs.nixfmt-rfc-style
pkgs.rust-analyzer
pkgs.nodePackages.typescript-language-server
pkgs.lua-language-server
pkgs.nodePackages.vscode-langservers-extracted
pkgs.lemminx
niveumPackages.jq-lsp
pkgs.dhall-lsp-server
];
}

View File

@@ -0,0 +1,46 @@
{ pkgs, niveumPackages, config, ... }: {
environment.variables.EDITOR = pkgs.lib.mkForce "nvim";
environment.shellAliases.vi = "nvim";
environment.shellAliases.vim = "nvim";
environment.shellAliases.view = "nvim -R";
home-manager.users.me = {
editorconfig = {
enable = true;
settings = {
"*" = {
charset = "utf-8";
end_of_line = "lf";
trim_trailing_whitespace = true;
insert_final_newline = true;
indent_style = "space";
indent_size = 2;
};
"*.py" = { indent_size = 4; };
Makefile = { indent_style = "tab"; };
"*.md" = { trim_trailing_whitespace = false; };
};
};
};
environment.systemPackages = [
(pkgs.writers.writeDashBin "vim" ''neovim "$@"'')
(niveumPackages.vim.override {
stylixColors = config.lib.stylix.colors;
# colorscheme = "base16-gruvbox-dark-medium";
})
# language servers
pkgs.pyright
pkgs.haskellPackages.haskell-language-server
pkgs.texlab
pkgs.nil
pkgs.rust-analyzer
pkgs.nodePackages.typescript-language-server
pkgs.lua-language-server
pkgs.nodePackages.vscode-langservers-extracted
pkgs.lemminx
niveumPackages.jq-lsp
pkgs.dhall-lsp-server
];
}

View File

@@ -1,47 +1,7 @@
{
lib,
pkgs,
...
}: let
profile = name: custom:
lib.recursiveUpdate {
connection.id = name;
connection.type = "wifi";
connection.interface-name = "wlp3s0";
connection.permissions = "";
wifi.mac-address-blacklist = "";
wifi.ssid = name;
wifi.mode = "infrastructure";
ipv4.dns-search = "";
ipv4.method = "auto";
ipv6.addr-gen-mode = "stable-privacy";
ipv6.dns-search = "";
ipv6.method = "auto";
proxy = {};
}
custom;
eduroamProfile = {
connection.uuid = "eae9fee6-a7d2-4120-a609-440b457d6fcf";
wifi-security = {
group = "ccmp;tkip;";
key-mgmt = "wpa-eap";
pairwise = "ccmp;";
proto = "rsn;";
};
"802-1x" = {
altsubject-matches = "DNS:srv1-radius.cms.hu-berlin.de;DNS:srv2-radius.cms.hu-berlin.de;";
anonymous-identity = "anonymous@wlan.hu-berlin.de";
ca-cert = pkgs.fetchurl {
url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/t-telesec_globalroot_class_2.pem";
sha256 = "0if8aqd06sid7a0vw009zpa087wxcgdd2x6z2zs4pis5kvyqj2dk";
};
eap = "ttls;";
identity = lib.strings.fileContents <secrets/eduroam/identity>;
password = lib.strings.fileContents <secrets/eduroam/password>;
phase2-auth = "pap";
};
};
in {
}: {
programs.nm-applet.enable = true;
networking.networkmanager = {

View File

@@ -1,118 +1,17 @@
{
pkgs,
config,
lib,
...
}: let
ytdl-format = "'bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best'";
youtube-download = "${pkgs.ts}/bin/ts ${pkgs.yt-dlp}/bin/yt-dlp -f ${ytdl-format} --add-metadata";
newsboat-home = "${config.users.users.me.home}/cloud/Seafile/Documents/newsboat";
linkhandler = pkgs.writers.writeDash "linkhandler" ''
# Feed script a url or file location.
# If an image, it will view in sxiv,
# if a video or gif, it will view in mpv
# if a music file or pdf, it will download,
# otherwise it opens link in browser.
# If no url given. Opens browser. For using script as $BROWSER.
[ -z "$1" ] && { "$BROWSER"; exit; }
case "$1" in
*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*)
setsid -f ${pkgs.mpv}/bin/mpv -quiet "$1" >/dev/null 2>&1 ;;
*png|*jpg|*jpe|*jpeg|*gif)
curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///")" && sxiv -a "/tmp/$(echo "$1" | sed "s/.*\///")" >/dev/null 2>&1 & ;;
*mp3|*flac|*opus|*mp3?source*)
setsid -f tsp curl -LO "$1" >/dev/null 2>&1 ;;
*)
if [ -f "$1" ]; then "$TERMINAL" -e "$EDITOR" "$1"
else setsid -f "$BROWSER" "$1" >/dev/null 2>&1; fi ;;
esac
'';
newsboat-config = pkgs.writeText "config" ''
auto-reload no
reload-threads 8
prepopulate-query-feeds yes
# dont keep a search history
history-limit 0
datetime-format %F
text-width 85
external-url-viewer "${pkgs.urlscan}/bin/urlscan -dc -r '${linkhandler} {}'"
browser ${linkhandler}
macro , open-in-browser
macro c set browser "${pkgs.xsel}/bin/xsel -b <<<" ; open-in-browser ; set browser ${linkhandler}
macro v set browser "${pkgs.util-linux}/bin/setsid -f ${pkgs.mpv}/bin/mpv" ; open-in-browser ; set browser ${linkhandler}
macro y set browser "${youtube-download}" ; open-in-browser ; set browser ${linkhandler}
bind-key j down
bind-key k up
bind-key j next articlelist
bind-key k prev articlelist
bind-key J next-feed articlelist
bind-key K prev-feed articlelist
bind-key G end
bind-key g home
bind-key d pagedown
bind-key u pageup
bind-key l open
bind-key h quit
bind-key a toggle-article-read
bind-key n next-unread
bind-key N prev-unread
bind-key D pb-download
bind-key U show-urls
bind-key x pb-delete
save-path ${newsboat-home}/saved/
highlight all "---.*---" yellow default
# highlight feedlist ".*(0/0))" default default
highlight article "^Title:.*" yellow default bold
highlight article "^Author:.*" yellow default
highlight article "^Flags:.*" red default
highlight article "\\[[0-9][0-9]*\\]" color66 default bold
highlight article "\\[image [0-9][0-9]*\\]" color109 default bold
highlight article "\\[embedded flash: [0-9][0-9]*\\]" color66 default bold
color listfocus blue default
color listfocus_unread blue default bold
color info red default bold
urls-source "miniflux"
miniflux-url "https://feed.kmein.de"
miniflux-login "kfm"
miniflux-password "${lib.strings.fileContents <secrets/miniflux/password>}"
'';
newsboat-sql = "${pkgs.sqlite}/bin/sqlite3 ${newsboat-home}/cache.db";
in {
}: {
environment.systemPackages = [
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" ''
${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.writers.writeDashBin "miniflux-watch-later" ''
miniflux_api_token=$(cat ${config.age.secrets.miniflux-api-token.path})
random_feed_item=$(
${pkgs.curl}/bin/curl -u "$miniflux_api_token" --basic -s 'https://feed.kmein.de/v1/entries?starred=true&limit=0' \
| ${pkgs.jq}/bin/jq -r '.entries[].id' \
| ${pkgs.coreutils}/bin/shuf -n1
)
${pkgs.xdg-utils}/bin/xdg-open "https://feed.kmein.de/starred/entry/$random_feed_item"
'')
];
}

View File

@@ -7,7 +7,7 @@
config.allowUnfree = true;
};
nix = {
package = pkgs.nixFlakes;
package = pkgs.nixVersions.stable;
extraOptions = "experimental-features = nix-command flakes";
nixPath = ["nixpkgs=${inputs.nixpkgs}"];
};

View File

@@ -9,6 +9,8 @@
}: let
worldradio = pkgs.callPackage ../packages/worldradio.nix {};
externalNetwork = import ../lib/external-network.nix;
zoteroStyle = {
name,
sha256,
@@ -30,7 +32,7 @@
})
(zoteroStyle {
name = "apa";
sha256 = "sha256-yq4fW6hQknycLjaj5fPbXLrQlGBp5myXiOSHBU90jEc=";
sha256 = "sha256-sUf0Ov5c9aTUoLsYSRbQl3Qs9ELkb5/Tky35kH7pKuE=";
})
];
@@ -63,58 +65,33 @@ in {
environment.systemPackages = with pkgs; [
# INTERNET
aria2
firefox
tdesktop
w3m
wget
whois
dnsutils
# FILE MANAGERS
lf
cinnamon.nemo
pcmanfm
# MEDIA
ffmpeg
imagemagick
exiftool
nsxiv
# ARCHIVE TOOLS
unzip
unrar
p7zip
zip
# MONITORS
htop
iotop # I/O load monitor
iftop # interface bandwidth monitor
lsof # list open files
psmisc # for killall, pstree
graphviz
# SHELL
bat # better cat
fd # better find
file # determine file type
dos2unix
genpass # generate passwords
gdu # ncurses disk usage (ncdu is broken)
rmlint # remove duplicate files
(pkgs.writers.writeDashBin "genpassphrase" ''${pkgs.genpass}/bin/genpass --passphrase | ${pkgs.gnused}/bin/sed 's/ /-/g;s/\(^\|-\)\([a-z]\)/\1\U\2/g;s/$/-'$(${pkgs.coreutils}/bin/date +%Y)'/' '')
gcc
python3Packages.jsonschema # json validation
jq # json toolkit
pup # html toolkit
htmlq
xsv # csv toolkit
fq # toolkit for yaml, xml and binaries
magic-wormhole-rs # file transfer
man-pages
man-pages-posix
tree
exfat # to mount windows drives
parallel # for parallel, since moreutils shadows task spooler
ripgrep # better grep
rlwrap
progress # display progress bars for pipes
# HARDWARE TOOLS
usbutils # for lsusb
pciutils # for lspci
lshw # for lshw
gnome-disk-utility
arandr # xrandr for noobs
libnotify # for notify-send
xclip # clipboard CLI
@@ -124,11 +101,19 @@ in {
calibre
electrum
inkscape
niveumPackages.gimp
gthumb
astrolog
obsidian
lemmeknow # identify strings
aichat # chat with llms
anki-bin # flashcards
jbofihe # lojbanic software
zoom-us # video conferencing
(pkgs.writers.writeDashBin "im" ''
weechat_password=$(${pkgs.pass}/bin/pass weechat)
exec ${unstablePackages.weechat}/bin/weechat -t -r '/mouse enable; /remote add makanek http://${externalNetwork.makanek}:8002 -password='"$weechat_password"'; /remote connect makanek'
'')
alejandra # nix formatter
pdfgrep # search in pdf
pdftk # pdf toolkit
@@ -140,12 +125,11 @@ in {
niveumPackages.hc # print files as qr codes
yt-dlp
espeak
bc # calculator
pari # gp -- better calculator
rink # unit converter
niveumPackages.auc
niveumPackages.noise-waves
niveumPackages.cheat-sh
niveumPackages.infschmv
niveumPackages.polyglot
niveumPackages.qrpaste
niveumPackages.ttspaste
niveumPackages.new-mac # get a new mac address
@@ -157,29 +141,33 @@ in {
niveumPackages.ipa # XSAMPA to IPA converter
niveumPackages.pls
niveumPackages.mpv-tv
niveumPackages.mpv-iptv
jellyfin-media-player
niveumPackages.devanagari
niveumPackages.betacode # ancient greek betacode to unicode converter
niveumPackages.meteo
niveumPackages.mahlzeit
niveumPackages.vimv
niveumPackages.jq-lsp
niveumPackages.swallow # window swallowing
niveumPackages.literature-quote
jless # less(1) for json
niveumPackages.booksplit
niveumPackages.dmenu-randr
niveumPackages.dmenu-bluetooth
niveumPackages.manual-sort
niveumPackages.dns-sledgehammer
ts
niveumPackages.vg
niveumPackages.fkill
niveumPackages.wttr
niveumPackages.unicodmenu
niveumPackages.emailmenu
niveumPackages.closest
niveumPackages.trans
(niveumPackages.mpv-radio.override {
di-fm-key-file = config.age.secrets.di-fm-key.path;
})
(niveumPackages.mpv-radio.override {
di-fm-key-file = config.age.secrets.di-fm-key.path;
executableName = "cro-radio";
mpvCommand = "${niveumPackages.cro}/bin/cro";
})
(niveumPackages.mpv-tuner.override {
di-fm-key-file = config.age.secrets.di-fm-key.path;
})
@@ -192,11 +180,11 @@ in {
niveumPackages.menu-calc
nix-prefetch-git
niveumPackages.nix-git
nixfmt
nixfmt-rfc-style
par
qrencode
inputs.menstruation-backend.defaultPackage.x86_64-linux
# inputs.menstruation-backend.defaultPackage.x86_64-linux
inputs.agenix.packages.x86_64-linux.default
inputs.recht.defaultPackage.x86_64-linux
@@ -222,10 +210,7 @@ in {
#krebs
niveumPackages.dic
niveumPackages.cyberlocker-tools
niveumPackages.untilport
niveumPackages.kpaste
config.nur.repos.mic92.ircsink
pkgs.nur.repos.mic92.ircsink
(haskellPackages.ghcWithHoogle (hs: [
hs.text
@@ -245,26 +230,15 @@ in {
]))
# python3Packages.poetry
# language servers
pyright
haskell-language-server
texlab
nil
rust-analyzer
elmPackages.elm-language-server
nodePackages.typescript-language-server
lua-language-server
nodePackages.vscode-langservers-extracted
dhall-nix
dhall-bash
dhall-json
dhall
html-tidy
nodePackages.csslint
nodePackages.jsonlint
nodePackages.prettier
nodePackages.typescript
nodePackages.eslint
nodePackages.yarn
deno # better node.js
nodejs
texlive.combined.scheme-full
latexrun
(aspellWithDicts (dict: [dict.de dict.en dict.en-computers]))
@@ -275,8 +249,9 @@ in {
libreoffice
# gnumeric
dia
unstablePackages.pandoc
niveumPackages.man-pandoc
pandoc
librsvg # pandoc depends on this to include SVG in documents
# niveumPackages.man-pandoc
typst
# proselint
asciidoctor
@@ -287,6 +262,10 @@ in {
# nightly.rust
shellcheck
# photography
gphoto2
darktable
(pkgs.writers.writeDashBin "hass-cli" ''
HASS_SERVER=http://zaatar.r:8123 HASS_TOKEN="$(cat ${config.age.secrets.home-assistant-token.path})" exec ${pkgs.home-assistant-cli}/bin/hass-cli "$@"
'')

View File

@@ -12,7 +12,7 @@ in {
];
# allow connecting to .local printers
services.avahi.nssmdns = true;
services.avahi.nssmdns4 = true;
hardware.printers.ensurePrinters = [
{

View File

@@ -1,23 +0,0 @@
{
pkgs,
config,
...
}: {
services.xserver.displayManager.sessionCommands = "${pkgs.seafile-client}/bin/seafile-applet &";
home-manager.users.me.xdg.configFile = {
"Seafile/Seafile Client.conf".source = (pkgs.formats.ini {}).generate "Seafile Client.conf" {
Behavior = {
hideDockIcon = false;
hideMainWindowWhenStarted = true;
};
Settings = {
computerName = config.networking.hostName;
lastShiburl = "https://box.hu-berlin.de";
};
UsedServerAddresses.main = "https://box.hu-berlin.de";
};
};
environment.systemPackages = [pkgs.seafile-client];
}

View File

@@ -1,12 +1,6 @@
{pkgs, ...}: {
sound.enable = true;
# realtime audio for pulseaudio
security.rtkit.enable = true;
services.pipewire = {
enable = false;
systemWide = false;
enable = true;
alsa = {
enable = true;
support32Bit = true;
@@ -15,25 +9,13 @@
jack.enable = true;
};
hardware.pulseaudio = {
enable = true;
package = pkgs.pulseaudioFull;
# copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine
zeroconf.discovery.enable = true;
extraConfig = ''
load-module ${
toString [
"module-tunnel-sink-new"
"server=zaatar.r"
"sink_name=zaatar"
"channels=2"
"rate=44100"
]
}
'';
};
systemd.user.services.pipewire-pulse.path = [pkgs.pulseaudio];
users.users.me.extraGroups = ["pipewire" "audio"];
services.avahi = {
enable = true;
publish.enable = true;
publish.userServices = true;
};
environment.systemPackages = [
pkgs.pavucontrol

View File

@@ -2,35 +2,41 @@
inherit (import ../lib) sshPort kieran;
externalNetwork = import ../lib/external-network.nix;
in {
users.users.me.openssh.authorizedKeys.keys = kieran.sshKeys pkgs;
users.users.me.openssh.authorizedKeys.keys = kieran.sshKeys;
programs.ssh.startAgent = true;
home-manager.users.me = {
services.gpg-agent = rec {
enable = true;
enableSshSupport = true;
defaultCacheTtlSsh = 2 * 60 * 60;
maxCacheTtlSsh = 4 * defaultCacheTtlSsh;
sshKeys = [
"568047C91DE03A23883E340F15A9C24D313E847C"
"BB3EE102DB8CD45540A78A6B18B511B67061F6B4" # kfm@manakish ed25519
"3F8986755818B5762A096BE212777EAAC441DD9D" # fysiweb rsa
"0E4ABD229432486CC432639BB0986B2CDE365105" # agenix ed25519
"A1E8D32CBFCDBD2DE798E2298D795CCFD785AE06" # kfm@kabsa ed25519
];
};
# https://discourse.nixos.org/t/gnome-keyring-and-ssh-agent-without-gnome/11663
xsession.profileExtra = ''
eval $(${pkgs.gnome3.gnome-keyring}/bin/gnome-keyring-daemon --daemonize --components=ssh,secrets)
export SSH_AUTH_SOCK
'';
# services.gpg-agent = rec {
# enable = false;
# enableSshSupport = true;
# defaultCacheTtlSsh = 2 * 60 * 60;
# maxCacheTtlSsh = 4 * defaultCacheTtlSsh;
# sshKeys = [
# "568047C91DE03A23883E340F15A9C24D313E847C"
# "BB3EE102DB8CD45540A78A6B18B511B67061F6B4" # kfm@manakish ed25519
# "3F8986755818B5762A096BE212777EAAC441DD9D" # fysiweb rsa
# "0E4ABD229432486CC432639BB0986B2CDE365105" # agenix ed25519
# "A1E8D32CBFCDBD2DE798E2298D795CCFD785AE06" # kfm@kabsa ed25519
# ];
# };
};
environment.extraInit = ''
if [[ -z "$SSH_AUTH_SOCK" ]]; then
export SSH_AUTH_SOCK="$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket)"
fi
'';
# environment.extraInit = ''
# if [[ -z "$SSH_AUTH_SOCK" ]]; then
# export SSH_AUTH_SOCK="$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket)"
# fi
# '';
environment.interactiveShellInit = ''
GPG_TTY="$(tty)"
export GPG_TTY
${pkgs.gnupg}/bin/gpg-connect-agent updatestartuptty /bye > /dev/null
'';
# environment.interactiveShellInit = ''
# GPG_TTY="$(tty)"
# export GPG_TTY
# ${pkgs.gnupg}/bin/gpg-connect-agent updatestartuptty /bye > /dev/null
# '';
home-manager.users.me.programs.ssh = {
enable = true;
@@ -74,6 +80,11 @@ in {
user = "kfm";
port = sshPort;
};
fatteh = {
hostname = "fatteh.r";
user = "kfm";
port = sshPort;
};
};
};
}

View File

@@ -17,5 +17,7 @@ in {
};
};
users.users.root.openssh.authorizedKeys.keys = kieran.sshKeys pkgs;
users.users.root.openssh.authorizedKeys.keys = kieran.sshKeys ++ [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPoiRIn1dBUtpApcUyGbZKN+m5KBSgKIDQjdnQ8vU0xU kfm@kibbeh" # travel laptop
];
}

View File

@@ -1,10 +1,10 @@
{
config,
pkgs,
lib,
inputs,
...
}: let
locker = x: "https://c.krebsco.de/${x}";
dictionaries = {
lojban = {
jbo-deu = pkgs.fetchzip {
@@ -30,7 +30,7 @@
sha256 = "1kmbdjqinrcxkc6jdyyrq5rl2wzhnrychyynnh91yhrjwjxlh44k";
};
Woodhouse = pkgs.fetchzip {
url = "https://c.krebsco.de/Woodhouse.zip";
url = locker "Woodhouse.zip";
sha256 = "1dvnc2679yb048q2f3hr2h34acvhan0n3iir6h9ajlrdzz48mlkq";
stripRoot = false;
};
@@ -69,39 +69,39 @@
sha256 = "1bjja3n3layfd08xa1r0a6375dxh5zi6hlv7chkhgnx800cx7hxn";
};
Roget = pkgs.fetchzip {
url = "http://download.huzheng.org/bigdict/stardict-Roget_s_II_The_New_Thesaurus_3th_Ed-2.4.2.tar.bz2";
sha256 = "1szyny9497bpyyccf9l5kr3bnw0wvl4cnsd0n1zscxpyzlsrqqbz";
url = locker "stardict-Roget_s_II_The_New_Thesaurus_3th_Ed-2.4.2.tar.bz2";
hash = "sha256-f2GcNf3+dqZ/sKBpywjdHHC7Rp6FJseY93edRJK3/us=";
};
JargonFile = pkgs.fetchzip {
url = "http://download.huzheng.org/dict.org/stardict-dictd-jargon-2.4.2.tar.bz2";
sha256 = "096phar9qpmm0fnaqv5nz8x9lpxwnfj78g4vjfcfyd7kqp7iqla4";
url = locker "stardict-dictd-jargon-2.4.2.tar.bz2";
hash = "sha256-RFEcz8XzNO+Yk5s8dKSzvF+aOvq2bKysA7VenLKC1yQ=";
};
Oxford-Collocations = pkgs.fetchzip {
url = "http://download.huzheng.org/bigdict/stardict-Oxford_Collocations_Dictionary_2nd_Ed-2.4.2.tar.bz2";
url = locker "stardict-Oxford_Collocations_Dictionary_2nd_Ed-2.4.2.tar.bz2";
sha256 = "1zkfs0zxkcn21z2lhcabrs77v4ma9hpv7qm119hpyi1d8ajcw07q";
};
Langenscheidt-Deu-En = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/german/stardict-Handw_rterbuch_Deutsch_Englisc-2.4.2.tar.bz2";
url = locker "stardict-Handw_rterbuch_Deutsch_Englisc-2.4.2.tar.bz2";
sha256 = "12q9i5azq7ylyrpb6jqbaf1rxalc3kzcwjvbinvb0yabdxb80y30";
};
Langenscheidt-En-Deu = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/german/stardict-Handw_rterbuch_Englisch_Deutsc-2.4.2.tar.bz2";
url = locker "stardict-Handw_rterbuch_Englisch_Deutsc-2.4.2.tar.bz2";
sha256 = "087b05h155j5ldshfgx91pz81h6ijq2zaqjirg7ma8ig3l96zb59";
};
Duden_Das_Fremdworterbuch = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/german/stardict-Duden_Das_Fremdworterbuch-2.4.2.tar.bz2";
url = locker "stardict-Duden_Das_Fremdworterbuch-2.4.2.tar.bz2";
sha256 = "1zrcay54ccl031s6dvjwsah5slhanmjab87d81rxlcy8fx0xd8wq";
};
Duden_De_De = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/german/stardict-Duden_De_De-2.4.2.tar.bz2";
url = locker "stardict-Duden_De_De-2.4.2.tar.bz2";
sha256 = "1fhay04w5aaj83axfmla2ql34nb60gb05dgv0k94ig7p8x4yxxlf";
};
ConciseOED = pkgs.fetchzip {
url = "http://download.huzheng.org/bigdict/stardict-Concise_Oxford_English_Dictionary-2.4.2.tar.bz2";
url = locker "stardict-Concise_Oxford_English_Dictionary-2.4.2.tar.bz2";
sha256 = "19kpcxbhqzpmhi94mp48nalgmsh6s7rsx1gb4kwkhirp2pbjcyl7";
};
Duden_Synonym = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/german/stardict-Duden_Synonym-2.4.2.tar.bz2";
url = locker "stardict-Duden_Synonym-2.4.2.tar.bz2";
sha256 = "0cx086zvb86bmz7i8vnsch4cj4fb0cp165g4hig4982zakj6f2jd";
};
};
@@ -141,32 +141,38 @@
};
oed = {
OED1 = pkgs.fetchzip {
url = "http://download.huzheng.org/bigdict/stardict-Oxford_English_Dictionary_2nd_Ed._P1-2.4.2.tar.bz2";
url = locker "stardict-Oxford_English_Dictionary_2nd_Ed._P1-2.4.2.tar.bz2";
sha256 = "0i5vv1rv44yfwyf9bfbdrb9brzhhpvz2jnh39fv8hh107nkv2vcf";
};
OED2 = pkgs.fetchzip {
url = "http://download.huzheng.org/bigdict/stardict-Oxford_English_Dictionary_2nd_Ed._P2-2.4.2.tar.bz2";
url = locker "stardict-Oxford_English_Dictionary_2nd_Ed._P2-2.4.2.tar.bz2";
sha256 = "1pk234pbq4pk55d8sjk0pp9j5sajm82f8804kf2xm2x5p387q1rg";
};
};
coptic.dictionary = inputs.coptic-dictionary.packages.x86_64-linux.coptic-stardict;
coptic = {
dictionary = inputs.coptic-dictionary.packages.x86_64-linux.coptic-stardict;
Crum = pkgs.fetchzip {
url = locker "stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9";
};
};
russian = {
LingvoGermanRussian = pkgs.fetchzip {
url = "http://download.huzheng.org/lingvo/stardict-GR-LingvoUniversal-2.4.2.tar.bz2";
url = locker "stardict-GR-LingvoUniversal-2.4.2.tar.bz2";
sha256 = "0p353gs2z4vj70hqsdhffjaaw3a4zlmcs46flipmf35lm5wmaj0g";
};
LingvoRussianGerman = pkgs.fetchzip {
url = "http://download.huzheng.org/lingvo/stardict-RG-LingvoUniversal-2.4.2.tar.bz2";
url = locker "stardict-RG-LingvoUniversal-2.4.2.tar.bz2";
sha256 = "03f9wdmkgpjifpms7dyh10ma29wf3ka1j3zlp1av0cybhdldk2a8";
};
};
turkish = {
BabylonTurkishEnglish = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/bidirectional/stardict-babylon-Babylon_Turkish_English-2.4.2.tar.bz2";
url = locker "stardict-babylon-Babylon_Turkish_English-2.4.2.tar.bz2";
sha256 = "1zpzgk3w0536gww31bj58cmn3imnkndyjwbcr7bay8ibq2kzv44z";
};
BabylonEnglishTurkish = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/bidirectional/stardict-babylon-Babylon_English_Turkish-2.4.2.tar.bz2";
url = locker "stardict-babylon-Babylon_English_Turkish-2.4.2.tar.bz2";
sha256 = "0myx31xzb7nrn5m657h0bwdgm5xp93ccwp6lcpbxgjxdjm3q0hc5";
};
};
@@ -286,29 +292,28 @@
" | less -FR
'';
in {
environment.etc.stardict.source = toString (makeStardictDataDir ({
Crum = pkgs.fetchzip {
url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9";
};
SmithBiographyMythology = pkgs.fetchzip {
url = "https://github.com/latin-dict/Smith1873/releases/download/v1.0/Smith1873-stardict.zip";
sha256 = "01h5fxacp2m60xir8kzslkfy772vs3vmz07zhdwfhcwdaxif2af2";
};
SmithAntiquities = pkgs.fetchzip {
url = "https://github.com/latin-dict/Smith1890/releases/download/v1.0/Smith1890-stardict.zip";
sha256 = "0vpsv62p2lrzmgys4d1swpnc6lqhdi7rxwkj2ngy3lz5dk3fysyb";
};
}
// dictionaries.classics
// dictionaries.sanskrit
// dictionaries.oed
// dictionaries.russian
// dictionaries.englishGerman
// dictionaries.turkish));
# environment.etc.stardict.source = toString (makeStardictDataDir ({
# Crum = pkgs.fetchzip {
# url = "http://download.huzheng.org/misc/stardict-Coptic-English_all_dialects-2.4.2.tar.bz2";
# sha256 = "1fi281mb9yzv40wjsdapi8fzpa7x2yscz582lv2qnss9g8zzzzr9";
# };
# SmithBiographyMythology = pkgs.fetchzip {
# url = "https://github.com/latin-dict/Smith1873/releases/download/v1.0/Smith1873-stardict.zip";
# sha256 = "01h5fxacp2m60xir8kzslkfy772vs3vmz07zhdwfhcwdaxif2af2";
# };
# SmithAntiquities = pkgs.fetchzip {
# url = "https://github.com/latin-dict/Smith1890/releases/download/v1.0/Smith1890-stardict.zip";
# sha256 = "0vpsv62p2lrzmgys4d1swpnc6lqhdi7rxwkj2ngy3lz5dk3fysyb";
# };
# }
# // dictionaries.classics
# // dictionaries.sanskrit
# // dictionaries.oed
# // dictionaries.russian
# // dictionaries.englishGerman
# // dictionaries.turkish));
environment.systemPackages = [
# pkgs.goldendict
(makeStardict "lsj" dictionaries.classics)
(makeStardict "sa" dictionaries.sanskrit)
(makeStardict "oed" dictionaries.oed)

View File

@@ -10,7 +10,8 @@
wants = ["network-online.target"];
startAt = "weekly";
serviceConfig = {
user = "kfm";
User = config.users.users.me.name;
Group = config.users.users.me.group;
WorkingDirectory = "/home/kfm/cloud/nextcloud/Uni/Meta/Mensa";
LoadCredential = [
"password:${config.age.secrets.stw-berlin-card-code.path}"

View File

@@ -15,32 +15,40 @@
in {
# https://danth.github.io/stylix/tricks.html
# stylix.image = inputs.wallpapers.outPath + "/meteora/rodrigo-soares-250630.jpg";
stylix.enable = true;
stylix.image = generatedWallpaper;
environment.etc."stylix/wallpaper.png".source = generatedWallpaper;
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-light-medium.yaml";
stylix.cursor = {
name = "capitaine-cursors-white";
package = pkgs.capitaine-cursors;
size = 12;
};
# environment.etc."stylix/wallpaper.png".source = generatedWallpaper;
# stylix.polarity = "either";
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/${
{
"0" = "synth-midnight-dark";
"1" = "apprentice"; # https://romainl.github.io/Apprentice/
"2" = "one-light";
"3" = "one-dark";
"4" = "material"; # https://github.com/ntpeters/base16-materialtheme-scheme
"5" = "material-palenight";
"6" = "material-lighter";
"7" = "tomorrow"; # https://github.com/chriskempson/tomorrow-theme
"8" = "tomorrow-night";
"9" = "gruvbox-light-medium"; # https://github.com/dawikur/base16-gruvbox-scheme
"a" = "gruvbox-dark-medium";
"b" = "selenized-light"; # https://github.com/jan-warchol/selenized
"c" = "selenized-dark";
"d" = "papercolor-light";
"e" = "papercolor-dark";
"f" = "dracula"; # https://draculatheme.com/
}
.${builtins.head (lib.stringToCharacters inputs.nixpkgs.rev)}
}.yaml";
# stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/${
# onedark
# synth-midnight-dark
# apprentice # https://romainl.github.io/Apprentice/
# one-light
# onedark
# material # https://github.com/ntpeters/base16-materialtheme-scheme
# material-palenight
# material-lighter
# tomorrow # https://github.com/chriskempson/tomorrow-theme
# tomorrow-night
# gruvbox-light-medium # https://github.com/dawikur/base16-gruvbox-scheme
# gruvbox-dark-medium
# selenized-light # https://github.com/jan-warchol/selenized
# selenized-dark
# papercolor-light
# papercolor-dark
# dracula # https://draculatheme.com/
# }.yaml";
stylix.fonts = {
serif = {

View File

@@ -1,36 +0,0 @@
{
pkgs,
lib,
config,
...
}: let
celan = pkgs.fetchzip {
url = "http://c.krebsco.de/celan.tar.gz";
sha256 = "sha256-nA+EwAH2vkeolsy9AoPLEMt1uGKDZe/aPrS95CZvuus=";
};
in {
niveum.telegramBots.celan = {
enable = true;
time = "08:00";
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@PaulCelan"];
command = toString (pkgs.writers.writeDash "random-celan" ''
cd ${celan}
poem="$(${pkgs.findutils}/bin/find . -type f | ${pkgs.coreutils}/bin/shuf -n1)"
source="$(${pkgs.coreutils}/bin/dirname "$poem" | ${pkgs.gnused}/bin/sed 's#^\./##;s/[-_]/ /g;s!/! !g;s/0\([0-9]\+\)/\1/g')"
cat "$poem"
echo
printf "Aus: %s\n" "$source"
'');
};
systemd.timers.telegram-bot-celan.timerConfig.RandomizedDelaySec = "10h";
niveum.passport.services = [
{
title = "Paul Celan Bot";
description = "sends a random poem by Paul Celan to Telegram.";
link = "https://t.me/PaulCelan";
}
];
}

View File

@@ -1,27 +0,0 @@
{
pkgs,
config,
inputs,
lib,
...
}: let
hesychius = inputs.scripts.outPath + "/hesychius/hesychius.txt";
in {
niveum.telegramBots.hesychius = {
enable = true;
time = "08:00";
tokenFile = config.age.secrets.telegram-token-kmein.path;
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,23 +0,0 @@
{
pkgs,
config,
lib,
niveumPackages,
...
}: {
niveum.telegramBots.quotebot = {
enable = true;
time = "08/6:00";
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["-1001760262519"];
command = "${niveumPackages.literature-quote}/bin/literature-quote";
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,29 +0,0 @@
{
pkgs,
lib,
config,
...
}: {
niveum.telegramBots.tlg-wotd = {
enable = true;
time = "9:30";
chatIds = ["@tlgwotd"];
tokenFile = config.age.secrets.telegram-token-kmein.path;
command = toString (pkgs.writers.writeDash "tlg-wotd" ''
${pkgs.curl}/bin/curl -sSL http://stephanus.tlg.uci.edu/Iris/Wotd \
| ${pkgs.recode}/bin/recode html..utf8 \
| ${pkgs.jq}/bin/jq -r '
"*\(.word)* '\'''\(.definition | sub("<.*>"; "") | rtrimstr(" "))'\'''\n\nFirst occurrence: \(.firstOccurrence)\nNumber of occurrences: \(.totalOccurrences)"
'
'');
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";
}
];
}

View File

@@ -3,7 +3,8 @@
lib,
...
}: let
url = "http://wallpaper.r/realwallpaper-krebs-stars-berlin.png";
# url = "http://wallpaper.r/realwallpaper-krebs-stars-berlin.png";
url = "http://wallpaper.r/realwallpaper-krebs.png";
stateDir = "~/.cache/wallpaper";
in {
systemd.user.services.wallpaper = {

View File

@@ -2,11 +2,10 @@
config,
pkgs,
...
}: {
home-manager.users.me.home.file.".zshrc".text = ''
# nothing to see here
'';
}: let
promptColours.success = "cyan";
promptColours.failure = "red";
in {
environment.systemPackages = [pkgs.atuin];
environment.variables.ATUIN_CONFIG_DIR = toString (pkgs.writeTextDir "/config.toml" ''
auto_sync = true
@@ -52,13 +51,13 @@
export KEYTIMEOUT=1
hash -d nixos=/etc/nixos niveum=${config.users.users.me.home}/projects/niveum
hash -d nixos=/etc/nixos niveum=${config.users.users.me.home}/sync/src/niveum
autoload -U zmv run-help
autoload -U zmv run-help edit-command-line
fpath=(${zsh-completions}/src $fpath)
'';
promptInit = with config.niveum; ''
promptInit = ''
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' check-for-changes true
@@ -99,6 +98,8 @@
zle -N zle-line-init
zle -N zle-keymap-select
zle -N edit-command-line
bindkey -M vicmd v edit-command-line
'';
};
}

1443
flake.lock generated

File diff suppressed because it is too large Load Diff

221
flake.nix
View File

@@ -3,22 +3,24 @@
inputs = {
agenix.url = "github:ryantm/agenix";
# alew-web.url = "git+ssh://gitea@code.kmein.de:22022/kfm/alew-web.git?ref=refs/heads/master";
coptic-dictionary.url = "github:kmein/coptic-dictionary";
flake-utils.url = "github:numtide/flake-utils";
home-manager.url = "github:nix-community/home-manager/release-23.05";
home-manager.url = "github:nix-community/home-manager/release-24.11";
menstruation-backend.url = "github:kmein/menstruation.rs";
menstruation-telegram.url = "github:kmein/menstruation-telegram";
nix-on-droid.url = "github:t184256/nix-on-droid/release-23.05";
nixinate.url = "github:matthewcroughan/nixinate";
nixpkgs-old.url = "github:NixOS/nixpkgs/50fc86b75d2744e1ab3837ef74b53f103a9b55a0";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/master";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
nur.url = "github:nix-community/NUR";
recht.url = "github:kmein/recht";
retiolum.url = "git+https://git.thalheim.io/Mic92/retiolum";
retiolum.url = "github:krebs/retiolum";
rust-overlay.url = "github:oxalica/rust-overlay";
scripts.url = "github:kmein/scripts";
stylix.url = "github:danth/stylix/release-23.05";
stockholm.url = "github:krebs/stockholm";
stylix.url = "github:danth/stylix/release-24.11";
telebots.url = "github:kmein/telebots";
tinc-graph.url = "github:kmein/tinc-graph";
voidrice.url = "github:Lukesmithxyz/voidrice";
@@ -29,18 +31,16 @@
agenix.inputs.nixpkgs.follows = "nixpkgs";
coptic-dictionary.inputs.nixpkgs.follows = "nixpkgs";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
menstruation-backend.inputs.flake-utils.follows = "flake-utils";
menstruation-backend.inputs.nixpkgs.follows = "nixpkgs";
menstruation-backend.inputs.rust-overlay.follows = "rust-overlay";
# menstruation-backend.inputs.flake-utils.follows = "flake-utils";
# menstruation-backend.inputs.nixpkgs.follows = "nixpkgs";
# menstruation-backend.inputs.rust-overlay.follows = "rust-overlay";
menstruation-telegram.inputs.flake-utils.follows = "flake-utils";
menstruation-telegram.inputs.menstruation-backend.follows = "menstruation-backend";
menstruation-telegram.inputs.nixpkgs.follows = "nixpkgs-old";
nix-on-droid.inputs.home-manager.follows = "home-manager";
nix-on-droid.inputs.nixpkgs.follows = "nixpkgs";
nixinate.inputs.nixpkgs.follows = "nixpkgs";
recht.inputs.flake-utils.follows = "flake-utils";
recht.inputs.nixpkgs.follows = "nixpkgs";
rust-overlay.inputs.flake-utils.follows = "flake-utils";
rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
scripts.inputs.flake-utils.follows = "flake-utils";
scripts.inputs.nixpkgs.follows = "nixpkgs";
@@ -55,47 +55,87 @@
wallpapers.flake = false;
};
nixConfig = {
extra-substituters = [ "https://kmein.cachix.org" ];
extra-trusted-public-keys = [ "kmein.cachix.org-1:rsJ2b6++VQHJ1W6rGuDUYsK/qUkFA3bNpO6PyEyJ9Ls=" ];
};
outputs = inputs @ {
self,
nixpkgs,
nixpkgs-unstable,
nur,
home-manager,
nixinate,
agenix,
retiolum,
nixinate,
flake-utils,
nix-on-droid,
stylix,
...
}:
{
apps =
nixinate.nixinate.x86_64-linux self
// {
x86_64-linux = let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
apps = {
x86_64-darwin = let
pkgs = nixpkgs.legacyPackages.x86_64-darwin;
in {
deploy-maakaron = {
type = "app";
program = toString (pkgs.writers.writeDash "deploy-maakaron" ''
exec $(nix build .#homeConfigurations.maakaron.activationPackage --no-link --print-out-paths)/activate
'');
};
};
x86_64-linux = let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
lib = nixpkgs.lib;
in
nixinate.nixinate.x86_64-linux self
// {
mock-secrets = {
type = "app";
program = toString (pkgs.writers.writeDash "mock-secrets" ''
${pkgs.findutils}/bin/find secrets -not -path '*/.*' -type f | ${pkgs.coreutils}/bin/sort > secrets.txt
'');
};
deploy = {
}
# the following error prevents remote building of ful: https://github.com/NixOS/nixpkgs/issues/177873
// builtins.listToAttrs (map (hostname: let
externalNetwork = import ./lib/external-network.nix;
targets = {
ful = "root@ful";
zaatar = "root@zaatar";
makanek = "root@makanek";
manakish = "root@manakish";
tahina = "root@tahina";
tabula = "root@tabula";
kabsa = "root@kabsa";
fatteh = "root@fatteh";
kibbeh = "root@kibbeh";
};
in
lib.attrsets.nameValuePair "deploy-${hostname}" {
type = "app";
program = toString (pkgs.writers.writeDash "deploy" ''
if [ $# -eq 0 ]
then
systems='${toString (builtins.attrNames self.nixosConfigurations)}'
else
systems=$*
fi
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' 'nix run .\?submodules=1\#apps.nixinate.{}' ::: $systems
program = toString (pkgs.writers.writeDash "deploy-${hostname}" ''
exec ${pkgs.nixos-rebuild}/bin/nixos-rebuild switch \
--max-jobs 2 \
--log-format internal-json \
--flake .?submodules=1#${hostname} \
--target-host ${targets.${hostname}} 2>&1 \
| ${pkgs.nix-output-monitor}/bin/nom --json
'');
}) (builtins.attrNames self.nixosConfigurations))
// {
deploy-ful = {
type = "app";
program = toString (pkgs.writers.writeDash "deploy-ful" ''
exec ${pkgs.nix}/bin/nix run .?submodules=1#nixinate.ful \
--log-format internal-json 2>&1 \
| ${pkgs.nix-output-monitor}/bin/nom --json
'');
};
};
};
};
nixosModules = {
htgen = import modules/htgen.nix;
@@ -128,6 +168,21 @@
};
};
homeConfigurations = {
maakaron = let
system = "x86_64-darwin";
pkgs = nixpkgs.legacyPackages.${system};
in
home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [./systems/maakaron/home.nix];
extraSpecialArgs = {
inherit inputs;
niveumPackages = inputs.self.packages.${system};
};
};
};
nixosConfigurations = let
niveumSpecialArgs = system: {
unstablePackages = import nixpkgs-unstable {
@@ -135,6 +190,7 @@
config.allowUnfreePredicate = pkg:
builtins.elem (nixpkgs-unstable.lib.getName pkg) [
"obsidian"
"zoom"
];
};
@@ -147,6 +203,15 @@
system = "aarch64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/ful/configuration.nix
agenix.nixosModules.default
inputs.self.nixosModules.passport
inputs.self.nixosModules.panoptikon
inputs.self.nixosModules.htgen
inputs.stockholm.nixosModules.reaktor2
retiolum.nixosModules.retiolum
nur.modules.nixos.default
{ nixpkgs.overlays = [ inputs.stockholm.overlays.default ]; }
{
_module.args.nixinate = {
host = "ful";
@@ -156,29 +221,22 @@
hermetic = false;
};
}
systems/ful/configuration.nix
agenix.nixosModules.default
inputs.self.nixosModules.passport
inputs.self.nixosModules.panoptikon
retiolum.nixosModules.retiolum
nur.nixosModules.nur
];
};
zaatar = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{
_module.args.nixinate = {
host = "zaatar";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
hermetic = false;
};
}
systems/zaatar/configuration.nix
inputs.self.nixosModules.moodle-dl
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
kibbeh = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/kibbeh/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
@@ -188,34 +246,27 @@
# for using inputs in other config files
specialArgs = niveumSpecialArgs system;
modules = [
{
_module.args.nixinate = {
host = "makanek";
sshUser = "root";
buildOn = "local";
substituteOnTarget = true;
hermetic = false;
};
}
systems/makanek/configuration.nix
inputs.self.nixosModules.telegram-bot
inputs.self.nixosModules.htgen
inputs.self.nixosModules.passport
agenix.nixosModules.default
retiolum.nixosModules.retiolum
nur.nixosModules.nur
nur.modules.nixos.default
];
};
tahina = nixpkgs.lib.nixosSystem {
tahina = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/tahina/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
tabula = nixpkgs.lib.nixosSystem {
tabula = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/tabula/configuration.nix
agenix.nixosModules.default
@@ -226,20 +277,11 @@
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{
_module.args.nixinate = {
host = "manakish";
sshUser = "root";
buildOn = "local";
substituteOnTarget = true;
hermetic = false;
};
}
systems/manakish/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nur.nixosModules.nur
nur.modules.nixos.default
stylix.nixosModules.stylix
];
};
@@ -247,32 +289,35 @@
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{
_module.args.nixinate = {
host = "kabsa";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
hermetic = false;
};
}
systems/kabsa/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nur.nixosModules.nur
nur.modules.nixos.default
stylix.nixosModules.stylix
];
};
fatteh = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
systems/fatteh/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
home-manager.nixosModules.home-manager
nur.modules.nixos.default
stylix.nixosModules.stylix
];
};
};
}
// flake-utils.lib.eachSystem [flake-utils.lib.system.x86_64-linux flake-utils.lib.system.aarch64-linux] (system: let
// flake-utils.lib.eachSystem [flake-utils.lib.system.x86_64-linux flake-utils.lib.system.x86_64-darwin flake-utils.lib.system.aarch64-linux] (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [
nur.overlay
nur.overlays.default
(self: super: {
mpv = super.mpv.override {scripts = [inputs.self.packages.${system}.mpv-visualizer];};
mpv = super.mpv.override {scripts = [inputs.self.packages.${system}.mpv-visualizer super.mpvScripts.mpris];};
dmenu = super.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"'';
})
];
@@ -290,11 +335,15 @@
packages = rec {
auc = pkgs.callPackage packages/auc.nix {};
betacode = pkgs.callPackage packages/betacode.nix {};
brainmelter = pkgs.callPackage packages/brainmelter.nix {};
brassica = pkgs.callPackage packages/brassica.nix {};
cheat-sh = pkgs.callPackage packages/cheat-sh.nix {};
closest = pkgs.callPackage packages/closest {};
cro = pkgs.callPackage packages/cro.nix {};
cyberlocker-tools = pkgs.callPackage packages/cyberlocker-tools.nix {};
default-gateway = pkgs.callPackage packages/default-gateway.nix {};
depp = pkgs.callPackage packages/depp.nix {};
dashboard = pkgs.callPackage packages/dashboard {};
devanagari = pkgs.callPackage packages/devanagari {};
devour = pkgs.callPackage packages/devour.nix {};
dic = pkgs.callPackage packages/dic.nix {};
@@ -307,8 +356,11 @@
genius = pkgs.callPackage packages/genius.nix {};
gfs-fonts = pkgs.callPackage packages/gfs-fonts.nix {};
git-preview = pkgs.callPackage packages/git-preview.nix {};
gpt = pkgs.callPackage packages/gpt.nix {};
gpt35 = pkgs.callPackage packages/gpt.nix {model = "gpt-3.5-turbo";};
gpt4 = pkgs.callPackage packages/gpt.nix {model = "gpt-4";};
hc = pkgs.callPackage packages/hc.nix {};
jq-lsp = pkgs.callPackage packages/jq-lsp.nix {};
stardict-tools = pkgs.callPackage packages/stardict-tools.nix {};
heuretes = pkgs.callPackage packages/heuretes.nix {};
htgen = pkgs.callPackage packages/htgen.nix {};
image-convert-favicon = pkgs.callPackage packages/image-convert-favicon.nix {};
@@ -330,9 +382,11 @@
manual-sort = pkgs.callPackage packages/manual-sort.nix {};
menu-calc = pkgs.callPackage packages/menu-calc.nix {};
meteo = pkgs.callPackage packages/meteo.nix {};
noise-waves = pkgs.callPackage packages/noise-waves.nix {};
mpv-radio = pkgs.callPackage packages/mpv-radio.nix {di-fm-key-file = "/dev/null";};
mpv-tuner = pkgs.callPackage packages/mpv-tuner.nix {di-fm-key-file = "/dev/null";};
mpv-tv = pkgs.callPackage packages/mpv-tv.nix {};
mpv-iptv = pkgs.callPackage packages/mpv-iptv.nix {};
mpv-visualizer = unstablePackages.mpvScripts.visualizer;
new-mac = pkgs.callPackage packages/new-mac.nix {};
nix-git = pkgs.callPackage packages/nix-git.nix {};
@@ -340,8 +394,12 @@
notemenu = pkgs.callPackage packages/notemenu.nix {niveumPackages = self.packages.${system};};
opustags = pkgs.callPackage packages/opustags.nix {};
pls = pkgs.callPackage packages/pls.nix {};
polyglot = pkgs.callPackage packages/polyglot.nix {};
q = pkgs.callPackage packages/q.nix {};
qrpaste = pkgs.callPackage packages/qrpaste.nix {};
random-zeno = pkgs.callPackage packages/random-zeno.nix {};
rfc = pkgs.callPackage packages/rfc.nix {};
gimp = pkgs.callPackage packages/gimp.nix {};
scanned = pkgs.callPackage packages/scanned.nix {};
swallow = pkgs.callPackage packages/swallow.nix {};
text2pdf = pkgs.callPackage packages/text2pdf.nix {};
@@ -350,6 +408,7 @@
trans = pkgs.callPackage packages/trans.nix {};
ttspaste = pkgs.callPackage packages/ttspaste.nix {};
unicodmenu = pkgs.callPackage packages/unicodmenu.nix {};
emailmenu = pkgs.callPackage packages/emailmenu.nix {};
untilport = pkgs.callPackage packages/untilport.nix {};
vg = pkgs.callPackage packages/vg.nix {};
vim = pkgs.callPackage packages/vim.nix {niveumPackages = self.packages.${system};};
@@ -377,11 +436,7 @@
name = "booksplit";
packages = [pkgs.ffmpeg pkgs.glibc.bin];
};
dmenu-randr = wrapScript {
script = inputs.voidrice.outPath + "/.local/bin/displayselect";
name = "dmenu-randr";
packages = [pkgs.dmenu pkgs.bc pkgs.psmisc pkgs.util-linux pkgs.xorg.xrandr pkgs.gawk pkgs.libnotify pkgs.arandr (pkgs.writers.writeDashBin "setbg" "")];
};
dmenu-randr = pkgs.callPackage packages/dmenu-randr.nix {};
tag = wrapScript {
script = inputs.voidrice.outPath + "/.local/bin/tag";
name = "tag";

View File

@@ -1,5 +1,5 @@
pkgs: rec {
terminal = "alacritty";
browser = "${pkgs.firefox}/bin/firefox";
fileManager = "${pkgs.cinnamon.nemo}/bin/nemo";
fileManager = "${pkgs.pcmanfm}/bin/pcmanfm";
}

View File

@@ -15,6 +15,8 @@
repository = "rest:http://${host}:${toString port}/";
};
remoteDir = "/home/kfm/remote";
firewall = lib: {
accept = {
source,
@@ -43,11 +45,11 @@
theme = pkgs: {
gtk = {
name = "Adwaita-dark";
package = pkgs.gnome.gnome-themes-extra;
package = pkgs.gnome-themes-extra;
};
icon = {
name = "Adwaita";
package = pkgs.gnome.adwaita-icon-theme;
package = pkgs.adwaita-icon-theme;
};
cursor = {
name = "capitaine-cursors-white";
@@ -67,20 +69,18 @@
github = "kmein";
email = "kmein@posteo.de";
name = "Kierán Meinhardt";
sshKeys = pkgs:
pkgs.lib.strings.splitString "\n" (pkgs.lib.strings.fileContents (pkgs.fetchurl {
url = "https://github.com/kmein.keys";
hash = "sha256-TvvPwplrH9cw7NE4GKqbE5ga+oBHM+TkjxYQ3b1fpLI=";
}));
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyTnGhFq0Q+vghNhrqNrAyY+CsN7nNz8bPfiwIwNpjk" # kabsa
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOiQEc8rTr7C7xVLYV7tQ99BDDBLrJsy5hslxtCEatkB" # manakish
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByreBjBEMJKjgpKLd5XZHIUUwIhNafVqN6OUOQpJa3y" # fatteh
];
};
syncthing.devices = {
kabsa.id = "R6DEBD7-G5RYDKN-VFA3HPO-WX4DNVI-373F7OQ-AW5MZTT-3L4BDVW-Y6ROEAF";
heym.id = "HLQSG3D-WSKLA6S-MEYQ3EU-GDBGABE-PY53RQ6-SWQAP2I-Z5MVBVX-MYPJXAM";
kibbeh.id = "HLQSG3D-WSKLA6S-MEYQ3EU-GDBGABE-PY53RQ6-SWQAP2I-Z5MVBVX-MYPJXAM";
manakish.id = "AJVBWR2-VFFAGZF-7ZF5JAX-T63GMOG-NZ446WK-MC5E6WK-6X6Q2HE-QQA2JQ3";
toum.id = "CBJQXFF-FMFGWFU-2J6FMPR-SRDTSGX-7NHOYOH-CQCABKF-KQJMRJC-SDE24Q4";
zaatar.id = "CGHO6LK-ZJBAXBD-UWI7AH3-BXYARE6-EUIM7PE-O2FUCOM-VCCRNCM-IG34WQ7";
tahina.id = "UKJ2CBO-EQPKQL4-3QLRUSG-SSYR6AB-CCCUTKU-CLPYR7N-RUI5A6Y-JTL5NA4";
fatteh.id = "GSOGYT3-2GBHZXT-MNCTDIY-3BJIR4V-OHVOOMJ-ICVLKXR-U4C7RFB-HJOK3AC";
};
ignorePaths = [

View File

@@ -1,5 +1,21 @@
{
rec {
thunderbirdProfile = "donnervogel";
pronouns = builtins.concatStringsSep "/" [
"er"
"he"
"is"
"οτος"
"هو"
"̄ϥ"
"он"
"han"
""
];
defaults = {
thunderbird = {
enable = true;
profiles = [thunderbirdProfile];
};
aerc.enable = true;
realName = "Kierán Meinhardt";
folders.inbox = "INBOX";

34
lib/keyboards/XCompose Normal file
View File

@@ -0,0 +1,34 @@
# Import default rules from the system Compose file
include "%L"
# Custom definitions
<Multi_key> <U0634> <U0634> : "ژ" U0698 # ز + ز = ژ
<Multi_key> <U063A> <U063A> : "گ" U06AF # غ + غ = گ
<Multi_key> <U0641> <U0641> : "ڤ" U06A4 # ف + ف = ڤ
<Multi_key> <U062C> <U062C> : "چ" U0686 # ج + ج = چ
<Multi_key> <U0628> <U0628> : "پ" U067E # ب + ب = پ
<Multi_key> <U0643> <U0643> : "ک" U06A9 # ك + ك = ک
<Multi_key> <U064A> <U064A> : "ی" U06CC # ي + ي = ی
<Multi_key> <U0647> <U064A> : "ۀ" U06C0 # ه + ي = ۀ
<Multi_key> <E> <E> : "ɛ" U025B
<Multi_key> <O> <O> : "ɔ" U0254
<Multi_key> <s> <h> : "ʃ" U0283
<Multi_key> <g> <h> : "ɣ" U0283
<Multi_key> <b> <h> : "β" U0283
<Multi_key> <p> <h> : "ɸ" U0283
<Multi_key> <z> <h> : "ʒ" U0292
<Multi_key> <e> <i> : "ɪ" U026A
<Multi_key> <e> <u> : "ʊ" U028A
<Multi_key> <colon> <colon> : "ː" U02D0
<Multi_key> <question> <period> : "ʔ" U0294
<Multi_key> <period> <question> : "ʕ" U0295
<Multi_key> <apostrophe> <period> : "ˈ" U02C8
<Multi_key> <period> <apostrophe> : "ˌ" U02CC
<dead_belowring> <nobreakspace> : "̥" U0325 # COMBINING RING BELOW
<dead_belowbreve> <nobreakspace> : "̮" U032E # COMBINING BREVE BELOW
<dead_invertedbreve> <nobreakspace> : "̑" U0311 # COMBINING INVERTED BREVE
<dead_belowmacron> <nobreakspace> : "̱" U0331 # COMBINING MACRON BELOW
<dead_belowcircumflex> <nobreakspace> : "̯" U032F # COMBINING INVERTED BREVE BELOW
<dead_circumflex> <Multi_key> <underscore> <e> : "ᵊ" U1D4A
# TODO zwnj

23
lib/keyboards/arabic Normal file
View File

@@ -0,0 +1,23 @@
// Arabic keyboard using Buckwalter transliteration
// http://www.qamus.org/transliteration.htm
// Martin Vidner
// stolen from https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/2505a3ec2605ea7303bc6de68acf96578f0fd424/symbols/ara#L179
// TODO 06CC ARABIC LETTER FARSI YEH
default partial alphanumeric_keys
xkb_symbols "buckwalter" {
include "ara(buckwalter)"
name[Group1] = "Arabic (Buckwalter + Persian)";
key <AE09> {[ 0x1000669, parenleft ] };
key <AE10> {[ 0x1000660, parenright ] };
key <AD10> {[ Arabic_tehmarbuta, 0x100067E ] }; // پ
key <AD11> {[ 0x100200C, 0x1000671 ] }; // alif wasla, ZWNJ
key <AD12> {[ 0x10006C0, Arabic_hamzaonyeh ] }; // ۀ
key <AC05> {[ Arabic_ghain, 0x10006AF ] }; // گ
key <AC07> {[ Arabic_jeem, 0x1000686 ] }; // چ
key <AB03> {[ 0x10006A9, 0x1000698 ] }; // ک ژ
key <AB04> {[ Arabic_theh, 0x10006A4 ] }; // ڤ
key <AB09> {[ period, Arabic_hamzaonalef ] };
};

60
lib/keyboards/avestan Normal file
View File

@@ -0,0 +1,60 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Generated keyboard layout file with the Keyboard Layout Editor.
// For more about the software, see http://code.google.com/p/keyboardlayouteditor
//
// Version 0.2, changed AD09.
partial default alphanumeric_keys
xkb_symbols "avestan"
{
name[Group1] = "Iran - Avestan";
key <AB01> { [ U10B30, U10B32 ] }; // 𐬰 𐬲
key <AB02> { [ U10B11, U10B12 ] }; // 𐬑 𐬒
key <AB03> { [ U10B17, UE102 ] }; // 𐬗 
key <AB04> { [ U10B2C, U10B13 ] }; // 𐬬 𐬓
key <AB05> { [ U10B20, U10B21 ] }; // 𐬠𐬡
key <AB06> { [ U10B25, U10B27 ] }; // 𐬥 𐬧
key <AB07> { [ U10B28, U10B29 ] }; // 𐬨 𐬩
key <AB08> { [ U10B3C, U10B39 ] }; // 𐬼 𐬹
key <AB09> { [ U10B3E, U10B3D ] }; // 𐬾 𐬽
key <AB10> { [ U10B3F, periodcentered ] }; // 𐬿 ·
key <AC01> { [ U10B00, U10B01 ] }; // 𐬀 𐬁
key <AC02> { [ U10B2F, U10B31 ] }; // 𐬯 𐬱
key <AC03> { [ U10B1B, U10B1C ] }; // 𐬛 𐬜
key <AC04> { [ U10B1F, U10B16 ] }; // 𐬟 𐬖
key <AC05> { [ U10B14, U10B15 ] }; // 𐬔 𐬕
key <AC06> { [ U10B35, UE100 ] }; // 𐬵 
key <AC07> { [ U10B18, U10B24 ] }; // 𐬘 𐬤
key <AC08> { [ U10B10, UE101 ] }; // 𐬐 
key <AC09> { [ U10B2E, UE103 ] }; // 𐬮 
key <AC10> { [ U10B3B, U10B3A ] }; // 𐬻 𐬺
key <AC11> { [ U10B1D ] }; // 𐬝
key <AD01> { [ U10B22, U10B23 ] }; // 𐬢 𐬣
key <AD02> { [ U10B33, U10B34 ] }; // 𐬳 𐬴
key <AD03> { [ U10B08, U10B09 ] }; // 𐬈 𐬉
key <AD04> { [ U10B2D, U10B26 ] }; // 𐬭 𐬦
key <AD05> { [ U10B19, U10B1A ] }; // 𐬙 𐬚
key <AD06> { [ U10B2B, U10B2A ] }; // 𐬫 𐬪
key <AD07> { [ U10B0E, U10B0F ] }; // 𐬎 𐬏
key <AD08> { [ U10B0C, U10B0D ] }; // 𐬌 𐬍
key <AD09> { [ U10B0A, U10B0B ] }; // 𐬊 𐬋
key <AD10> { [ U10B1E ] }; // 𐬞
key <AD11> { [ U10B06, U10B07 ] }; // 𐬆 𐬇
key <AD12> { [ U10B02, U10B03 ] }; // 𐬂 𐬃
key <AE01> { [ U10B78 ] }; // 𐭸
key <AE02> { [ U10B79 ] }; // 𐭹
key <AE03> { [ U10B7A ] }; // 𐭺
key <AE04> { [ U10B7B ] }; // 𐭻
key <AE05> { [ U10B7C ] }; // 𐭼
key <AE06> { [ U10B7D ] }; // 𐭽
key <AE07> { [ U10B7E ] }; // 𐭾
key <AE08> { [ U10B7F ] }; // 𐭿
key <BKSL> { [ U10B04, U10B05 ] }; // 𐬄 𐬅
key <LSGT> { [ U10B04, U10B05 ] }; // 𐬄 𐬅
};

79
lib/keyboards/coptic Normal file
View File

@@ -0,0 +1,79 @@
// Coptic keyboard symbols for XKB and PC keyboard
// based on the mapping of logos
// (C) 2006 Moheb Mekhaiel <mohebm@gmx.de>
//
// Permission is granted to anyone to use, distribute and modify
// this file in any way, provided that the above copyright notice
// is left intact and the author of the modification summarizes
// the changes in this header.
//
// This file is distributed without any expressed or implied warranty.
partial default alphanumeric_keys
xkb_symbols "basic" {
name[Group1]= "Coptic";
key <TLDE> { [ U0308, U0311, U0361, U2CE5 ] };
key <AE01> { type[Group1] = "FOUR_LEVEL",
[ 1, U0304, VoidSymbol, U2CE6 ] };
key <AE02> { [ 2, U0306, U2CFD, U2CE7 ] };
key <AE03> { [ 3, U0374, U2056, U2CE8 ] };
key <AE04> { [ 4, U0375, U2058, U2CE9 ] };
key <AE05> { [ 5, U0307, U2059, U2CEA ] };
key <AE06> { [ 6, U0323, U2C8B, U2C8A ] };
key <AE07> { [ 7, U2CE4 ] };
key <AE08> { [ 8, U002A, U2026 ] };
key <AE09> { [ 9, parenleft, U201C, plusminus ] };
key <AE10> { [ 0, parenright, U201D, degree ] };
key <AE11> { [ U00B7, underscore, U2013, U2014 ] };
key <AE12> { [ U2E17, U0305, U033F ] };
key <BKSL> { [ U0300, U007C, backslash, U007C ] };
key <AD01> { [ U2C91, U2C90 ] };
key <AD02> { [ U2CB1, U2CB0 ] };
key <AD03> { [ U2C89, U2C88 ] };
key <AD04> { [ U2CA3, U2CA2 ] };
key <AD05> { [ U2CA7, U2CA6, U03EF, U03EE ] };
key <AD06> { [ U2CAF, U2CAE ] };
key <AD07> { [ U2CA9, U2CA8 ] };
key <AD08> { [ U2C93, U2C92 ] };
key <AD09> { [ U2C9F, U2C9E ] };
key <AD10> { [ U2CA1, U2CA0 ] };
key <AD11> { [ bracketleft,braceleft, U2018 ] };
key <AD12> { [ bracketright,braceright,U2019 ] };
key <AC01> { [ U2C81, U2C80 ] };
key <AC02> { [ U2CA5, U2CA4, U03E3, U03E2 ] };
key <AC03> { [ U2C87, U2C86, U03EF, U03EE ] };
key <AC04> { [ U2CAB, U2CAA, U03E5, U03E4 ] };
key <AC05> { [ U2C85, U2C84, U03EB, U03EA ] };
key <AC06> { [ U2C8F, U2C8E, U03E9, U03E8 ] };
key <AC07> { [ U03EB, U03EA, U03EB, U03EA ] };
key <AC08> { [ U2C95, U2C94, U03E7, U03E6 ] };
key <AC09> { [ U2C97, U2C96 ] };
key <AC10> { [ semicolon, colon, U2053, dead_doubleacute ] };
key <AC11> { [ apostrophe, U2CFF, U0022 ] };
key <AB01> { [ U2C8D, U2C8C ] };
key <AB02> { [ U2C9D, U2C9C ] };
key <AB03> { [ U2CAD, U2CAC, U03ED, U03EC ] };
key <AB04> { [ U03E3, U03E2, U03E3, U03E2 ] };
key <AB05> { [ U2C83, U2C82 ] };
key <AB06> { [ U2C9B, U2C9A ] };
key <AB07> { [ U2C99, U2C98 ] };
key <AB08> { [ comma, less, U00AB, U2039 ] };
key <AB09> { [ period, greater, U00BB, U203A ] };
key <AB10> { [ U0301, U2CFE, slash, question ] };
key <RALT> { type[Group1]="TWO_LEVEL",
[ ISO_Level3_Shift, Multi_key ] };
modifier_map Mod5 { <RALT> };
//include "level3(ralt_switch_multikey)"
// End alphanumeric section
};

114
lib/keyboards/farsi Normal file
View File

@@ -0,0 +1,114 @@
// https://github.com/gpuminingir/Farsi-Phonetic-Keyboard-Linux
// by @gpuminingir
partial alphanumeric_keys
xkb_symbols "qwerty" {
// Classic Finnish keyboard layout without dead keys and {[]} on asdf + AltG
name[Group1]="Persian (QWERTY)";
include "ir(pesq_part_basic)"
include "ir(pesq_part_ext)"
include "ir(pesq_part_keypad)"
include "nbsp(zwnj2nb3nnb4)"
include "level3(ralt_switch)"
};
hidden partial alphanumeric_keys
xkb_symbols "pesq_part_basic" {
// Persian digits
key <AE01> { [ Arabic_1, exclam, exclam ] }; // ١ ! !
key <AE02> { [ Arabic_2, at, at ] }; // ٢ @ @
key <AE03> { [ Arabic_3, numbersign, numbersign ] }; // ٣ # #
key <AE04> { [ Farsi_4, dollar, dollar ] }; // ۴ $ $
key <AE05> { [ Farsi_5, percent, percent ] }; // ۵ % %
key <AE06> { [ Farsi_6, asciicircum, asciicircum ] }; // ۶ ^ ^
key <AE07> { [ Arabic_7, ampersand, ampersand ] }; // ٧ & &
key <AE08> { [ Arabic_8, KP_Multiply, KP_Multiply ] }; // ٨ * *
key <AE09> { [ Arabic_9, Armenian_parenright, Armenian_parenright, Armenian_parenleft ] }; // ٩ ) ) (
key <AE10> { [ Farsi_0, Armenian_parenleft, Armenian_parenleft ] }; // ۰ ( (
key <AE11> { [ underbar, KP_Subtract, KP_Subtract ] }; // _
key <AE12> { [ KP_Equal, KP_Add, KP_Add ] }; // = + +
// Persian letters and symbols
key <AD01> { [ Arabic_qaf, Arabic_ghain ] }; // ق غ
key <AD02> { [ Arabic_sheen ] }; // ش
key <AD03> { [ Arabic_ain ] }; // ع
key <AD04> { [ Arabic_ra ] }; // ر
key <AD05> { [ Arabic_teh, Arabic_tah ] }; // ت ط
key <AD06> { [ Farsi_yeh ] }; // ى
key <AD07> { [ Arabic_waw ] }; // و
key <AD08> { [ Farsi_yeh ] }; // ى
key <AD09> { [ Arabic_waw ] }; // و
key <AD10> { [ Arabic_peh ] }; // پ
key <AD11> { [ bracketright, braceleft ] }; // ] } {
key <AD12> { [ bracketleft, braceright ] }; // [ { }
key <AC01> { [ Arabic_alef, Arabic_maddaonalef, Arabic_maddaonalef ] }; // ا آ آ
key <AC02> { [ Arabic_seen, Arabic_sad, Arabic_sheen, Arabic_sheen ] }; // س ص ش
key <AC03> { [ Arabic_dal, Arabic_thal ] }; // د ذ ذ
key <AC04> { [ Arabic_feh ] }; // ف
key <AC05> { [ Arabic_gaf, Arabic_ghain ] }; // گ
key <AC06> { [ Arabic_heh, Arabic_hah ] }; // ە ح ه
key <AC07> { [ Arabic_jeem, Arabic_jeh ] }; // ج ژ ژ
key <AC08> { [ Arabic_keheh ] }; // ک
key <AC09> { [ Arabic_lam ] }; // ل
key <AC10> { [ Arabic_semicolon, colon ] }; // ؛ : ։
key <AC11> { [ Arabic_comma, quotedbl, quotedbl ] }; // ، ” ”
key <AB01> { [ Arabic_zain, Arabic_dad, Arabic_zah, Arabic_zah ] }; // ض ض ز خ
key <AB02> { [ Arabic_khah, Arabic_zah ] }; // ظ خ
key <AB03> { [ Arabic_theh, Arabic_tcheh ] }; // چ ث
key <AB04> { [ Arabic_hamza, Arabic_waw ] }; // و
key <AB05> { [ Arabic_beh ] }; // ب
key <AB06> { [ Arabic_noon ] }; // ن
key <AB07> { [ Arabic_meem ] }; // م
key <AB08> { [ Arabic_comma, rightcaret, leftcaret ] }; // , > <
key <AB09> { [ period, leftcaret, rightcaret ] }; // . < >
key <AB10> { [ slash, Arabic_question_mark, question ] }; // / ?
key <AE11> { [ minus, underscore ] };
key <AE12> { [ equal, plus, 0x1002212 ] };
key <BKSL> { [ backslash, bar, 0x1002010 ] };
key <TLDE> { [ U02DC, UFDFC, UFDF2 ] }; // ˜ ﷼ ﷲ
};
hidden partial alphanumeric_keys
xkb_symbols "pesq_part_ext" {
// Persian and ASCII digits
key <AE01> { [ Farsi_1, exclam, grave, 1 ] };
key <AE02> { [ Farsi_2, 0x100066c, at, 2 ] };
key <AE03> { [ Farsi_3, 0x100066b, numbersign, 3 ] };
key <AE04> { [ Farsi_4, 0x100fdfc, dollar, 4 ] };
key <AE05> { [ Farsi_5, 0x100066a, percent, 5 ] };
key <AE06> { [ Farsi_6, multiply, asciicircum, 6 ] };
key <AE07> { [ Farsi_7, Arabic_comma, ampersand, 7 ] };
key <AE08> { [ Farsi_8, asterisk, enfilledcircbullet, 8 ] };
key <AE09> { [ Farsi_9, parenright, 0x100200e, 9 ] };
key <AE10> { [ Farsi_0, parenleft, 0x100200f, 0 ] };
};
hidden partial alphanumeric_keys
xkb_symbols "pesq_part_keypad" {
// Persian digits and Mathematical operators
key <KPDV> { [ division, XF86_Ungrab ] };
key <KPMU> { [ multiply, XF86_ClearGrab ] };
key <KPSU> { [ 0x1002212, XF86_Prev_VMode ] };
key <KPAD> { [ plus, XF86_Next_VMode ] };
key <KPEN> { [ KP_Enter ] };
key <KPEQ> { [ equal ] };
key <KP7> { [ KP_Home, Farsi_7 ] };
key <KP8> { [ KP_Up, Farsi_8 ] };
key <KP9> { [ KP_Prior, Farsi_9 ] };
key <KP4> { [ KP_Left, Farsi_4 ] };
key <KP5> { [ KP_Begin, Farsi_5 ] };
key <KP6> { [ KP_Right, Farsi_6 ] };
key <KP1> { [ KP_End, Farsi_1 ] };
key <KP2> { [ KP_Down, Farsi_2 ] };
key <KP3> { [ KP_Next, Farsi_3 ] };
key <KP0> { [ KP_Insert, Farsi_0 ] };
key <KPDL> { [ KP_Delete, 0x100066b ] };
};

69
lib/keyboards/gothic Normal file
View File

@@ -0,0 +1,69 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Generated keyboard layout file with the Keyboard Layout Editor.
// For more about the software, see http://code.google.com/p/keyboardlayouteditor
//
// Version 0.2, changed AD09.
partial default alphanumeric_keys
xkb_symbols "Gothic"
{
name[Group1] = "Gothic";
key <AB01> { [ U10336, U10336 ] }; // Z: 𐌶
key <AB02> { [ U10347, U10347 ] }; // X: 𐍇
key <AB03> { [ U10343, U10343 ] }; // C: 𐍃
key <AB04> { [ U10338, U10338 ] }; // V: 𐌸
key <AB05> { [ U10331, U10331 ] }; // B: 𐌱
key <AB06> { [ U1033D, U10341 ] }; // n: 𐌽 N: 𐍁
key <AB07> { [ U1033C, U1033C ] }; // M: 𐌼
key <AB08> { [ U10B3C, U10B39 ] };
key <AB09> { [ U10349, U10349 ] };
key <AB10> { [ U10B3F, periodcentered ] };
key <AC01> { [ U10330, U10330 ] }; // A: 𐌰
key <AC02> { [ U10343, U10343 ] }; // S: 𐍃
key <AC03> { [ U10333, U10338 ] }; // d: 𐌳 D: 𐌸
key <AC04> { [ U10346, U10346 ] }; // F: 𐍆
key <AC05> { [ U10332, U10332 ] }; // G: 𐌲
key <AC06> { [ U10337, U10337 ] }; // H: 𐌷
key <AC07> { [ U1033E, U1033E ] }; // J: 𐌾
key <AC08> { [ U1033A, U1033A ] }; // K: 𐌺
key <AC09> { [ U1033B, U1033B ] }; // L: 𐌻
key <AC10> { [ semicolon, colon ] };
key <AC11> { [ apostrophe, quotedbl ] };
key <AD01> { [ U10335, U10335 ] }; // Q: 𐌵
key <AD02> { [ U10345, U10345 ] }; // W: 𐍅
key <AD03> { [ U10334, U10334 ] }; // E: 𐌴
key <AD04> { [ U10342, U10342 ] }; // R: 𐍂
key <AD05> { [ U10344, U10338 ] }; // t: 𐍄 T: 𐌸
key <AD06> { [ U10348, U1034A ] }; // y: 𐍈 Y: 𐍊
key <AD07> { [ U1033F, U1033F ] }; // U: 𐌿
key <AD08> { [ U10339, U10339 ] }; // I: 𐌹
key <AD09> { [ U10349, U10349 ] }; // O: 𐍉
key <AD10> { [ U10340, U10340 ] }; // P: 𐍀
key <AD11> { [ bracketleft, braceleft ] };
key <AD12> { [ bracketright, braceright ] };
key <TLDE> { [ grave, asciitilde ] };
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, numbersign ] };
key <AE04> { [ 4, dollar ] };
key <AE05> { [ 5, percent ] };
key <AE06> { [ 6, asciicircum ] };
key <AE07> { [ 7, ampersand ] };
key <AE08> { [ 8, asterisk ] };
key <AE09> { [ 9, parenleft ] };
key <AE10> { [ 0, parenright ] };
key <AE11> { [ minus, underscore ] };
key <AE12> { [ equal, plus ] };
key <AB08> { [ comma, less ] };
key <AB09> { [ period, greater ] };
key <AB10> { [ slash, question ] };
key <BKSL> { [ U10B04, U10B05 ] };
key <LSGT> { [ U10B04, U10B05 ] };
};

8
lib/mycelium-network.nix Normal file
View File

@@ -0,0 +1,8 @@
{
zaatar = "5c5:49e0:7793:f017:59e1:1715:9e0e:3fc8";
fatteh = "463:a0d4:daa3:aa8d:a9b1:744a:46a5:7a80";
ful = "5bf:d60e:bebf:5163:f495:8787:880c:6d41";
kabsa = "432:e30:d5d8:9311:e34b:6587:96ee:3fcb";
makanek = "43f:ad4f:fa67:d9f7:8a56:713c:7418:164b";
manakish = "512:d3bd:3cd9:fcc8:ae34:81fa:385f:8c21";
}

View File

@@ -2,7 +2,6 @@
pkgs,
lib,
niveumPackages,
config,
...
}: {
# watcher scripts
@@ -37,7 +36,7 @@
then "2"
else "3"
}s/^/${messagePrefix}/p" \
| ${config.nur.repos.mic92.ircsink}/bin/ircsink \
| ${pkgs.nur.repos.mic92.ircsink}/bin/ircsink \
--nick ${nick} \
--server ${server} \
--target ${target}

View File

@@ -19,6 +19,11 @@
ipv6 = "42:0:3c46:f7a9:1f0a:1b2b:822a:6050";
};
fatteh = {
ipv6 = "42:0:3c46:aa73:82b0:14d7:7bf8:bf2";
ipv4 = "10.243.2.77";
};
manakish = {
ipv4 = "10.243.2.85";
ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27";

View File

@@ -18,6 +18,7 @@ let
dnb = "dnb";
dubstep = "dubstep";
french = "france";
hebrew = "hebrew";
geschepper = "geschepper";
greek = "greece";
greenlandic = "greenland";
@@ -118,7 +119,7 @@ let
in
[
{
stream = "http://lassul.us:8000/radio.ogg";
stream = "http://radio.lassul.us/radio.opus";
station = "Radio lassulus";
logo = "http://lassul.us/art/portraits/selbstportrait.jpg";
desc = "Diminutive from lassus (weary, faint, tired). A programming human. Doing superior professional art.";
@@ -148,6 +149,11 @@ in
logo = "https://de.wikipedia.org/wiki/Wikipedia:Enzyklop%C3%A4die/Logo_von_Wikipedia#/media/Datei:Wikipedia-logo-v2.svg";
tags = [tags.text];
}
{
stream = "http://stream.freiesradio.org:8000/live.mp3";
station = "Freies Radio Kassel";
desc = "Gesellschaft zur drahtlosen Belehrung und Erbauung";
}
{
stream = "http://162.244.80.20:6948";
station = "Cool Jazz Florida";
@@ -156,7 +162,7 @@ in
tags = [tags.jazz];
}
{
stream = "https://stream1.mfm.plexpark.com/radio/8000/simulcast-berlin-sd-64.aac";
stream = "https://metropol-fm.api.radiosphere.io/channels/MetropolFM/stream.aac?quality=4";
station = "Metropol FM Berlin";
logo = "https://www.metropolfm.de/wp-content/uploads/2017/04/berlin.png";
tags = [tags.berlin tags.turkish];
@@ -179,6 +185,12 @@ in
logo = "https://www.metropolfm.de/wp-content/uploads/2017/04/berlin.png";
tags = [tags.turkish];
}
{
station = "Ancient FM";
stream = "https://mediaserv73.live-streams.nl:18058/stream";
desc = " Music of the Mediæval and Renaissance";
tags = [tags.trad];
}
{
stream = "http://rb-stream.de:8000/rrb_128.mp3";
station = "Radio Golos Berlina";
@@ -1416,9 +1428,8 @@ in
tags = [tags.arabic];
}
{
stream = "http://5.9.16.111:8210/arabic_live";
station = "Radio Arabica";
logo = "https://radioarabica.de/wp-content/uploads/2020/09/LOGO_klein-1.png";
stream = "https://arabica.streamabc.net/76-radioorient-mp3-256-1050481";
station = "Radio Orient";
tags = [tags.berlin tags.arabic];
}
{
@@ -1543,6 +1554,11 @@ in
desc = "Ohne Blatt vor dem Mund! Für alle, die aufwachen wollen.";
tags = [tags.text];
}
{
station = "Kontrafunk";
stream = "https://icecast.multhielemedia.de/listen/kontrafunk/radio.mp3";
tags = [tags.text];
}
{
logo = "http://www.beatlesradio.com/content/images/thumbs/0000587.gif";
station = "Beatles Radio";
@@ -1725,6 +1741,10 @@ in
desc = "... einfach gute Laune!";
tags = [tags.schlager];
}
{
stream = "https://ifiye.tv/radio/8000/radio.mp3";
station = "Ifiye Radio";
}
{
stream = paloma "RP-Fresh";
station = paloma-name "Fresh";
@@ -1806,6 +1826,26 @@ in
stream = "http://lyd.nrk.no/nrk_radio_jazz_aac_h";
tags = [tags.jazz];
}
{
station = "Sham FM";
stream = "https://radioshamfm.grtvstream.com:8400/stream";
tags = [tags.arabic];
}
{
station = "Sky News Arabia";
stream = "https://radio.skynewsarabia.com/stream/radio/skynewsarabia";
tags = [tags.arabic];
}
{
station = "KAN Kol HaMusika";
stream = "http://kanliveicy.media.kan.org.il/icy/kankolhamusica_mp3";
tags = [tags.classical tags.hebrew];
}
{
station = "KAN 88";
stream = "https://playerservices.streamtheworld.com/api/livestream-redirect/KAN_88.mp3";
tags = [tags.hebrew];
}
{
station = "Digital Impulse Classical Channel";
stream = "http://orion.shoutca.st:8978/stream";
@@ -1907,9 +1947,14 @@ in
stream = "https://divyavani.radioca.st/stream";
}
{
station = "XXX sanskrit radio";
station = "Sanskrit Bharati";
tags = [tags.text tags.indian];
stream = "https://stream-23.zeno.fm/m08mkwsyw8quv?zs=0w7MJFPdRfavhR_zPt0M2g";
stream = "https://stream-23.zeno.fm/m08mkwsyw8quv";
}
{
stream = "http://epsilon.shoutca.st:8070/stream";
tags = [tags.text tags.indian tags.holy];
station = "Divyavani Sanskrit Radio";
}
{
station = "Radio Mariam Arabic";
@@ -1946,6 +1991,11 @@ in
stream = "http://162.244.81.30:8224/;";
station = "Quran Radio Lebanon";
}
{
tags = [tags.arabic tags.text tags.holy];
stream = "http://tijaniyyah.asuscomm.com:8000/stream/2/";
station = "Quran Radio Sudan";
}
{
tags = [tags.arabic tags.text tags.holy];
station = "Coptic for God";
@@ -1966,6 +2016,19 @@ in
station = "radioeins | RBB";
tags = [tags.top40 tags.pop];
}
{
stream = "https://liveradio.swr.de/sw282p3/swr4lu/";
station = "SWR3 Ludwigshafen";
tags = [tags.top40 tags.pop];
}
{
stream = "http://mp3.ffh.de/radioffh/hqlivestream.mp3";
station = "Hitradio FFH";
}
{ # Lex Fridman's favourite
stream = "av://lavfi:anoisesrc=color=brown";
station = "Brownian noise";
}
]
++ map (name: {
stream = "https://${name}.stream.publicradio.org/${name}.aac";

View File

@@ -88,10 +88,10 @@ local lsp_flags = {
local language_servers = {
clangd = {},
pyright = {}, -- pyright
tsserver = {}, -- typescript-language-server
-- tsserver = {}, -- typescript-language-server
cssls = {},
elmls = {}, -- elm-language-server
-- denols = {}, -- deno built in
denols = {}, -- deno built in
bashls = {}, -- bash-language-server
lua_ls = {
Lua = {
@@ -112,11 +112,19 @@ local language_servers = {
hls = {}, -- haskell-language-server
html = {}, -- vscode-langservers-extracted
jsonls = {}, -- vscode-langservers-extracted
nil_ls = {}, -- github:oxalica/nil
lemminx = {}, -- lemminx (for xml)
nil_ls = {
['nil'] = {
formatting = {
command = { "nixfmt" },
},
},
}, -- github:oxalica/nil
dhall_lsp_server = {}, -- dhall-lsp-server
-- rnix = {}, -- rnix-lsp
jqls = {}, -- jq-lsp
rust_analyzer = { ["rust-analyzer"] = {} },
eslint = {},
-- eslint = {},
-- volar? vls?
texlab = {
texlab = {

View File

@@ -3,8 +3,6 @@ vnoremap a= :Tabularize /=<CR>
vnoremap a; :Tabularize /::<CR>
vnoremap a- :Tabularize /-><CR>
colorscheme dim
" noremap <Leader>h :<C-u>split<CR>
" noremap <Leader>v :<C-u>vsplit<CR>
noremap <Leader>gs :Git<CR>
@@ -100,7 +98,8 @@ augroup filetypes
autocmd bufnewfile,bufread *.typ packadd typst.vim | set filetype=typst
autocmd bufnewfile,bufread *.ics packadd icalendar.vim | set filetype=icalendar
autocmd bufnewfile,bufread *.ts packadd typescript-vim | set filetype=typescript
autocmd bufnewfile,bufread *.jq packadd jq.vim
autocmd bufnewfile,bufread *.dhall packadd dhall-vim | set filetype=dhall
autocmd bufnewfile,bufread *.jq packadd jq.vim | set filetype=jq
autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4
autocmd bufnewfile,bufread urls,config set filetype=conf
autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4
@@ -108,6 +107,7 @@ augroup filetypes
autocmd filetype haskell packadd haskell-vim | set keywordprg=hoogle\ -i
autocmd filetype javascript packadd vim-javascript
autocmd filetype make setlocal noexpandtab
autocmd filetype tsv setlocal noexpandtab
autocmd filetype html packadd emmet-vim
autocmd filetype gitcommit setlocal spell spelllang=en
autocmd filetype mail setlocal spell spelllang=de textwidth=0

View File

@@ -28,6 +28,13 @@
example = "*:0/3";
default = "daily";
};
loadCredential = lib.mkOption {
type = lib.types.listOf lib.types.string;
description = ''
This can be used to pass secrets to the systemd service without adding them to the nix store.
'';
default = [];
};
reporters = lib.mkOption {
type = lib.types.listOf lib.types.path;
description = ''
@@ -72,36 +79,18 @@
cfg.watchers;
systemd.services =
{
setup-panoptikon = {
enable = true;
wantedBy = ["multi-user.target"];
serviceConfig = {
Type = "oneshot";
User = "panoptikon";
Group = "panoptikon";
WorkingDirectory = "/var/lib/panoptikon";
Restart = "on-failure";
};
script = ''
${pkgs.git}/bin/git init --quiet
${pkgs.git}/bin/git config user.email "panoptikon@${config.networking.hostName}"
${pkgs.git}/bin/git config user.name Panoptikon
'';
};
}
// lib.attrsets.mapAttrs' (watcherName: watcherOptions:
lib.attrsets.mapAttrs' (watcherName: watcherOptions:
lib.nameValuePair "panoptikon-${watcherName}" {
enable = true;
after = ["setup-panoptikon.service"];
startAt = watcherOptions.frequency;
serviceConfig = {
Type = "oneshot";
User = "panoptikon";
Group = "panoptikon";
WorkingDirectory = "/var/lib/panoptikon";
RestartSec = "60";
RestartSec = toString (60 * 60);
Restart = "on-failure";
LoadCredential = watcherOptions.loadCredential;
};
unitConfig = {
StartLimitIntervalSec = "300";
@@ -110,20 +99,14 @@
environment.PANOPTIKON_WATCHER = watcherName;
wants = ["network-online.target"];
script = ''
set -efu
${watcherOptions.script} > ${watcherName}
if [ -n "$(${pkgs.git}/bin/git diff -- ${watcherName})" ]; then
${lib.strings.concatMapStringsSep "\n" (reporter: ''
${pkgs.git}/bin/git diff HEAD^ -- ${watcherName} | ${reporter}
'')
watcherOptions.reporters}
:
set -fux
${watcherOptions.script} > ${lib.escapeShellArg watcherName}
diff_output=$(${pkgs.diffutils}/bin/diff --new-file ${lib.escapeShellArg (watcherName + ".old")} ${lib.escapeShellArg watcherName} || :)
if [ -n "$diff_output" ]
then
${lib.strings.concatMapStringsSep "\n" (reporter: ''echo "$diff_output" | ${reporter} || :'') watcherOptions.reporters}
fi
${pkgs.git}/bin/git add ${watcherName}
${pkgs.git}/bin/git commit --message "${watcherName} / $(${pkgs.coreutils}/bin/date -Is)" || :
mv ${lib.escapeShellArg watcherName} ${lib.escapeShellArg (watcherName + ".old")}
'';
})
cfg.watchers;

View File

@@ -5,48 +5,117 @@
...
}:
with lib; let
cfg = config.niveum.telegramBots;
cfg = config.niveum.bots;
botService = name: bot:
nameValuePair "telegram-bot-${name}" {
nameValuePair "bot-${name}" {
enable = bot.enable;
startAt = bot.time;
serviceConfig = {
Type = "oneshot";
LoadCredential = "token:${bot.tokenFile}";
LoadCredential = lib.optionals (bot.telegram.enable) [
"telegram-token:${bot.telegram.tokenFile}"
] ++ lib.optionals (bot.mastodon.enable) [
"mastodon-token:${bot.mastodon.tokenFile}"
] ++ lib.optionals (bot.matrix.enable) [
"matrix-token:${bot.matrix.tokenFile}"
];
};
wants = ["network-online.target"];
script = ''
export TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")"
QUOTE=$(${bot.command})
if [ -n "$QUOTE" ]; then
echo $QUOTE >&2
${strings.concatStringsSep "\n" (map (chatId: ''
${pkgs.curl}/bin/curl -X POST "https://api.telegram.org/bot''${TOKEN}/sendMessage" \
-d chat_id="${chatId}" \
-d text="$QUOTE" ${
lib.strings.optionalString (bot.parseMode != null)
"-d parse_mode=${bot.parseMode}"
} | ${pkgs.jq}/bin/jq -e .ok
'')
bot.chatIds)}
${lib.optionalString (bot.matrix.enable) ''
export MATRIX_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/matrix-token")"
export JSON_PAYLOAD=$(${pkgs.jq}/bin/jq -n --arg msgtype "m.text" --arg body "$QUOTE" '{msgtype: $msgtype, body: $body}')
${strings.concatStringsSep "\n" (map (chatId: ''
${pkgs.curl}/bin/curl -X POST "https://${bot.matrix.homeserver}/_matrix/client/r0/rooms/${chatId}/send/m.room.message" \
-d "$JSON_PAYLOAD" \
-H "Authorization: Bearer $MATRIX_TOKEN" \
-H "Content-Type: application/json"
'') bot.matrix.chatIds)}
''}
${lib.optionalString (bot.mastodon.enable) ''
export MASTODON_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/mastodon-token")"
${pkgs.curl}/bin/curl -X POST "https://${bot.mastodon.homeserver}/api/v1/statuses" \
-H "Authorization: Bearer $MASTODON_TOKEN" \
-d status="$QUOTE" \
-d "language=${bot.mastodon.language}" \
-d "visibility=public"
''}
${lib.optionalString (bot.telegram.enable) ''
export TELEGRAM_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/telegram-token")"
${strings.concatStringsSep "\n" (map (chatId: ''
${pkgs.curl}/bin/curl -X POST "https://api.telegram.org/bot''${TELEGRAM_TOKEN}/sendMessage" \
-d chat_id="${chatId}" \
-d text="$QUOTE" ${
lib.strings.optionalString (bot.telegram.parseMode != null)
"-d parse_mode=${bot.telegram.parseMode}"
} | ${pkgs.jq}/bin/jq -e .ok
'')
bot.telegram.chatIds)}
''}
fi
'';
};
in {
options.niveum.telegramBots = mkOption {
options.niveum.bots = mkOption {
type = types.attrsOf (types.submodule {
options = {
enable = mkEnableOption "Telegram bot";
enable = mkEnableOption "Mastodon and Telegram bot";
time = mkOption {type = types.str;};
tokenFile = mkOption {type = types.path;};
chatIds = mkOption {
type = types.listOf (types.strMatching "-?[0-9]+|@[A-Za-z0-9]+");
};
command = mkOption {type = types.str;};
parseMode = mkOption {
type = types.nullOr (types.enum ["HTML" "Markdown"]);
default = null;
matrix = mkOption {
default = {};
type = types.submodule {
options = {
enable = mkEnableOption "Posting to Matrix";
tokenFile = mkOption {type = types.path;};
homeserver = mkOption {
type = types.str;
};
chatIds = mkOption {
type = types.listOf types.str;
};
};
};
};
mastodon = mkOption {
default = {};
type = types.submodule {
options = {
enable = mkEnableOption "Posting to Mastodon";
language = mkOption {
type = types.str;
default = "en";
};
tokenFile = mkOption {type = types.path;};
homeserver = mkOption {
type = types.str;
default = "social.krebsco.de";
};
};
};
};
telegram = mkOption {
default = {};
type = types.submodule {
options = {
enable = mkEnableOption "Posting to Telegram";
tokenFile = mkOption {type = types.path;};
chatIds = mkOption {
type = types.listOf (types.strMatching "-?[0-9]+|@[A-Za-z0-9]+");
};
parseMode = mkOption {
type = types.nullOr (types.enum ["HTML" "Markdown"]);
default = null;
};
};
};
};
};
});

39
packages/brainmelter.nix Executable file
View File

@@ -0,0 +1,39 @@
{ writers, flite, netcat, gnused, ... }:
writers.writeDashBin "brainmelter" ''
SERVER="brockman.news"
PORT=6667
NICK="irccat"
USER="irccat"
CHANNEL="#all"
# Open connection to IRC server using a FIFO and netcat
FIFO=$(mktemp -u)
mkfifo "$FIFO"
trap "rm -f $FIFO" EXIT
# Send IRC commands
{
echo "NICK $NICK"
echo "USER $USER 0 * :$USER"
sleep 5
echo "JOIN $CHANNEL"
while true; do
sleep 30
echo "PING :keepalive"
done
} > "$FIFO" &
# Read from server and write to stdout
${netcat}/bin/nc "$SERVER" "$PORT" < "$FIFO" | while IFS= read -r line; do
voice="$(echo -e "awb\nkal\nrms\nslt" | shuf -n1)"
echo "$line" \
| ${gnused}/bin/sed -n 's/.*go.brockman.news\/\S\+ //p' \
| tee /dev/stderr \
| ${flite}/bin/flite -voice "$voice"
# Respond to PINGs to avoid timeout
if [ "$line" = PING* ]; then
server_ping=$(echo "$line" | cut -d':' -f2)
echo "PONG :$server_ping" > "$FIFO"
fi
done
''

5
packages/brassica.nix Normal file
View File

@@ -0,0 +1,5 @@
{
haskell,
haskellPackages,
}:
haskell.lib.dontCheck (haskell.lib.unmarkBroken (haskell.lib.doJailbreak haskellPackages.brassica))

10
packages/cro.nix Normal file
View File

@@ -0,0 +1,10 @@
{ writers, chromium }:
writers.writeDashBin "cro" ''
${chromium}/bin/chromium \
--disable-sync \
--no-default-browser-check \
--no-first-run \
--user-data-dir="$(mktemp -d)" \
--incognito \
"$@"
''

View File

@@ -0,0 +1,247 @@
{
writers,
formats,
acpi,
wtf,
himalaya,
lib,
jq,
gh,
curl,
khal,
todoman,
gnused,
coreutils,
astrolog,
weatherCityIds ? [2950159],
}: let
rowCount = 10;
columnCount = 6;
yaml = formats.yaml {};
command = args:
{
enabled = true;
type = "cmdrunner";
}
// args;
configuration.wtf = rec {
grid = {
columns = lib.replicate columnCount 32;
rows = lib.replicate rowCount 5;
};
mods.vdir_khal = command {
title = "Calendar";
cmd = "${khal}/bin/khal";
args = ["--color" "list" "--exclude-calendar" "calendarium-tridentinum"];
refreshInterval = "1m";
position = {
top = 4;
left = 0;
height = 4;
width = 2;
};
};
mods.vdir_todo = command {
enabled = true;
title = "Agenda";
cmd = writers.writeDash "vdir_todo" "${todoman}/bin/todo --color=always -h | ${coreutils}/bin/tac";
refreshInterval = "1m";
position = {
top = 4;
left = 2;
height = 4;
width = 2;
};
};
mods.weather = {
enabled = true;
cityids = weatherCityIds;
position = {
top = 8;
left = 2;
height = 2;
width = 2;
};
refreshInterval = "15m";
language = "DE";
tempUnit = "C";
useEmoji = true;
compact = true;
};
mods.top = command {
title = "uptime";
cmd = writers.writeDash "top" "top -b -n 1 -E g | ${gnused}/bin/sed -n '1,5p'";
refreshInterval = "30s";
position = {
top = 4;
left = 4;
height = 2;
width = 2;
};
enabled = true;
};
mods.resourceusage = {
enabled = true;
cpuCombined = false;
position = {
top = 6;
left = 4;
height = 2;
width = 2;
};
refreshInterval = "1s";
showCPU = true;
showMem = true;
showSwp = false;
};
mods.ipapi = {
enabled = false;
position = {
top = 0;
left = 1;
height = 2;
width = 2;
};
refreshInterval = "150s";
};
mods.battery-status = command {
enabled = true;
cmd = writers.writeDash "battery-status" ''
${acpi}/bin/acpi --battery --details | sed 's/^Battery //'
'';
refreshInterval = "1m";
position = {
top = 8;
left = 4;
height = 2;
width = 2;
};
};
mods.disk-usage = command {
enabled = false;
cmd = "df";
args = ["-h"];
refreshInterval = "1m";
position = {
top = 8;
left = 4;
height = 2;
width = 2;
};
};
mods.email = command {
title = "Email";
cmd = writers.writeDash "email" ''
${himalaya}/bin/himalaya accounts --output json \
| ${jq}/bin/jq -r 'map(.name) | join("\n")' \
| while read -r account
do
${himalaya}/bin/himalaya list --account "$account" -o json \
| ${jq}/bin/jq -r '
map(select(.flags == [])
| "\u001b[33m\(.from.addr)\u001b[0m \(.subject)") | join("\n")
'
done
'';
refreshInterval = "5m";
position = {
top = 0;
left = 0;
height = 4;
width = 2;
};
};
mods.gh-status = command {
enabled = true;
title = "GitHub";
cmd = writers.writeDash "gh-status" ''
${gh}/bin/gh api notifications \
| ${jq}/bin/jq -r 'map("\u001b[35m\(.repository.full_name)\u001b[0m \(.subject.title)") | join("\n")'
'';
refreshInterval = "5m";
position = {
top = 0;
left = 2;
height = 2;
width = 2;
};
};
mods.gh-issues = command {
enabled = true;
title = "GitHub";
cmd = writers.writeDash "gh-issues" ''
${gh}/bin/gh api issues \
| ${jq}/bin/jq -r 'map(select(.repository.owner.login == "kmein") | "\u001b[35m\(.repository.name)\u001b[0m \(.title)") | join("\n")'
'';
refreshInterval = "5m";
position = {
top = 2;
left = 2;
height = 2;
width = 2;
};
};
mods.calendar = command {
title = "Calendar";
cmd = "cal";
args = ["-3" "-m" "-w"];
pty = true;
refreshInterval = "5m";
position = {
top = 8;
left = 0;
height = 2;
width = 2;
};
};
mods.astro-aspects = command {
title = "Aspects";
enabled = false;
cmd = writers.writeDash "astro-aspects" "${astrolog}/bin/astrolog -n -zN Berlin -d";
refreshInterval = "1h";
position = {
top = 7;
left = 3;
height = 1;
width = 2;
};
};
mods.feed = command {
enabled = true;
title = "Feed";
cmd = writers.writeDash "feed" ''
${curl}/bin/curl -u "$WTF_MINIFLUX_API_KEY" --basic -s 'https://feed.kmein.de/v1/entries?status=unread&direction=desc' \
| ${jq}/bin/jq -r '
.total as $total | (
.entries
| map(select(.feed | .hide_globally| not) | "\(.feed.category.title) \u001b[32m\(.author)\u001b[0m \(.title)")
| join("\n")
)'
'';
# position = { top = 0; left = 5; height = 5; width = 1; };
position = {
top = 0;
left = 4;
height = 4;
width = 2;
};
refreshInterval = "15m";
};
mods.astro-positions = command {
enabled = false;
title = "Positions";
cmd = writers.writeDash "astro-positions" "${astrolog}/bin/astrolog -q $(date +'%m %d %Y %H:%M') -zN Berlin | ${gnused}/bin/sed -n '4,16p' | ${coreutils}/bin/cut -c 1-33";
refreshInterval = "1h";
position = {
top = 5;
left = 5;
height = 3;
width = 1;
};
};
};
in
writers.writeDashBin "dashboard" ''
exec ${wtf}/bin/wtfutil --config=${yaml.generate "config.yml" configuration}
''

102
packages/dmenu-randr.nix Executable file
View File

@@ -0,0 +1,102 @@
{
lib,
writers,
dmenu,
bc,
psmisc,
util-linux,
xorg,
gawk,
libnotify,
arandr,
gnugrep,
coreutils,
}:
writers.writeDashBin "dmenu-randr" ''
#!/bin/sh
export PATH=${lib.makeBinPath [dmenu bc psmisc util-linux xorg.xrandr gawk libnotify arandr gnugrep coreutils]}
# A UI for detecting and selecting all displays. Probes xrandr for connected
# displays and lets user select one to use. User may also select "manual
# selection" which opens arandr.
twoscreen() { # If multi-monitor is selected and there are two screens.
mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?")
# Mirror displays using native resolution of external display and a scaled
# version for the internal display
if [ "$mirror" = "yes" ]; then
external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:")
internal=$(echo "$screens" | grep -v "$external")
res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \
tail -n 1 | awk '{print $1}')
res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \
tail -n 1 | awk '{print $1}')
res_ext_x=$(echo "$res_external" | sed 's/x.*//')
res_ext_y=$(echo "$res_external" | sed 's/.*x//')
res_int_x=$(echo "$res_internal" | sed 's/x.*//')
res_int_y=$(echo "$res_internal" | sed 's/.*x//')
scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l)
scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l)
xrandr --output "$external" --auto --scale 1.0x1.0 \
--output "$internal" --auto --same-as "$external" \
--scale "$scale_x"x"$scale_y"
else
primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
secondary=$(echo "$screens" | grep -v "$primary")
direction=$(printf "left-of\\nright-of\\nabove\\nbelow" | dmenu -i -p "What side of $primary should $secondary be on?")
xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction" "$primary" --auto --scale 1.0x1.0
fi
}
morescreen() { # If multi-monitor is selected and there are more than two screens.
primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:")
direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:")
xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto
}
multimon() { # Multi-monitor handler.
case "$(echo "$screens" | wc -l)" in
2) twoscreen ;;
*) morescreen ;;
esac ;}
onescreen() { # If only one output available or chosen.
xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -)
}
postrun() { # Stuff to run to clean up.
{ killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen
}
# Get all possible displays
allposs=$(xrandr -q | grep "connected")
# Get all connected screens.
screens=$(echo "$allposs" | awk '/ connected/ {print $1}')
# If there's only one screen
[ "$(echo "$screens" | wc -l)" -lt 2 ] &&
{ onescreen "$screens"; postrun; notify-send "💻 Only one screen detected." "Using it in its optimal settings..."; exit ;}
# Get user choice including multi-monitor and manual selection:
# reenable if you sometimes want single display
chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") &&
case "$chosen" in
"manual selection") arandr ; exit ;;
"multi-monitor") multimon ;;
*) onescreen "$chosen" ;;
esac
postrun
''

18
packages/emailmenu.nix Normal file
View File

@@ -0,0 +1,18 @@
{
writers,
lib,
coreutils,
dmenu,
gawk,
libnotify,
xclip,
khard,
}:
writers.writeDashBin "emailmenu" ''
history_file=$HOME/.cache/emailmenu
PATH=${lib.makeBinPath [coreutils dmenu gawk libnotify xclip]}
chosen=$(${khard}/bin/khard email --parsable | awk '!seen[$0]++' | dmenu -i -p 📧 -1 -l 10 | tee --append "$history_file" | cut -f1)
[ "$chosen" != "" ] || exit
echo "$chosen" | tr -d '\n' | xclip -selection clipboard
notify-send --app-name="$(basename "$0")" "'$chosen' copied to clipboard." &
''

20
packages/gimp.nix Normal file
View File

@@ -0,0 +1,20 @@
{ gimp, fetchurl, runCommand, symlinkJoin, writers }:
let
bring-out-the-gimp = fetchurl {
url = "https://c.krebsco.de/bring-out-the-gimp.png";
hash = "sha256-k42M5j58OzbcMJwx9CeM2mD2VsVwPKHwJvU55+Rkowc=";
};
data-dir-prefix = "share/gimp/2.0";
data-dir = symlinkJoin {
name = "gimp";
paths = [
(runCommand "splash" {} ''
mkdir -p $out/${data-dir-prefix}/images
install ${bring-out-the-gimp} $out/share/gimp/2.0/images/gimp-splash.png
'')
gimp
];
};
in writers.writeDashBin "gimp" ''
exec env GIMP2_DATADIR=${data-dir}/${data-dir-prefix} ${gimp}/bin/gimp "$@"
''

80
packages/hora.nix Normal file
View File

@@ -0,0 +1,80 @@
{ symlinkJoin
, hledger
, writers
, lib
, git
, coreutils
, gnugrep
, timeLedger
, ...
}:
let
date = "${coreutils}/bin/date +'%Y-%m-%d %H:%M:%S'";
hora = writers.writeDashBin "hora" "${hledger}/bin/hledger -f ${lib.escapeShellArg timeLedger} \"$@\"";
hora-edit = writers.writeDashBin "hora-edit" "$EDITOR ${lib.escapeShellArg timeLedger}";
hora-status = writers.writeDashBin "hora-status" "${coreutils}/bin/tac ${lib.escapeShellArg timeLedger} | ${gnugrep}/bin/grep -m 1 .";
hora-start = writers.writeDashBin "hora-start" ''
last_nonempty_line=$(${hora-status}/bin/hora-status)
(echo $last_nonempty_line | ${gnugrep}/bin/grep -q "^o") || {
echo "Last activity must be closed: $last_nonempty_line" >/dev/stderr
exit 1
}
account=$1
(${hora}/bin/hora accounts | ${gnugrep}/bin/grep -q "^$account\$") || {
echo "The account '$account' is not known. Please add manually."
exit 1
}
message=$2
date=$(${date})
echo "i $date $account $message\n" >> "${timeLedger}"
echo "Started $account at $date" >/dev/stderr
'';
hora-stop = writers.writeDashBin "hora-stop" ''
last_nonempty_line=$(${hora-status}/bin/hora-status)
(echo $last_nonempty_line | ${gnugrep}/bin/grep "^i") || {
echo "Last activity cannot be closed: $last_nonempty_line" >/dev/stderr
exit 1
}
last_activity=$(echo "$last_nonempty_line" | ${coreutils}/bin/cut -d' ' -f 4)
date=$(${date})
echo "o $date\n" >> ${timeLedger}
echo "Stopped $last_activity at $date" >/dev/stderr
'';
hora-year = writers.writeDashBin "hora-year" ''
${hora}/bin/hora balance --tree --monthly --begin $(${coreutils}/bin/date +%Y) --depth 1
'';
hora-git = writers.writeDashBin "hora-git" ''
directory=$(${coreutils}/bin/dirname ${lib.escapeShellArg timeLedger})
if [ $# -gt 0 ]
then
${git}/bin/git -C "$directory" --all --message=$(${date})
else
${git}/bin/git -C "$directory" "$@"
fi
'';
hora-weekly = writers.writeDashBin "hora-weekly" ''
${hora}/bin/hora register -p weekly --depth 1 --empty
'';
in
symlinkJoin {
name = "hora";
paths = [
hora
hora-edit
hora-start
hora-status
hora-stop
hora-year
hora-git
hora-weekly
];
}

View File

@@ -51,6 +51,7 @@ XSAMPA_TO_IPA = {
"H\\": "\u029C",
"I": "\u026A",
"J": "\u0272",
"J\\": "\u025F",
"J\\_<": "\u0284",
"K": "\u026C",
"K\\": "\u026E",

16
packages/jq-lsp.nix Normal file
View File

@@ -0,0 +1,16 @@
{
buildGoModule,
fetchFromGitHub,
lib,
}:
buildGoModule {
name = "jq-lsp";
version = "unstable-2023-09-08";
src = fetchFromGitHub {
owner = "wader";
repo = "jq-lsp";
rev = "85edf1adbe5e6c91b37c67b6a4bf85eda1e49f2f";
hash = "sha256-ItLKRSbGZ8UqFEHCoh96KwhSpuKZ3l+2ZXnBkHEZL0M=";
};
vendorHash = "sha256-ppQ81uERHBgOr/bm/CoDSWcK+IqHwvcL6RFi0DgoLuw=";
}

View File

@@ -8,12 +8,31 @@
writers.writeDashBin "literature-quote" ''
PATH=$PATH:${lib.makeBinPath [xsv curl gnused]}
ROW=$(curl -Ls http://kmein.github.io/logotheca/quotes.csv | shuf -n1)
(
printf '%s\n\n %s: _%s_, %s\n' \
"$(echo "$ROW" | xsv select 4)" \
"$(echo "$ROW" | xsv select 1)" \
"$(echo "$ROW" | xsv select 2)" \
"$(echo "$ROW" | xsv select 3 | tr : ,)"
) | sed 's/ | /\n/g;s/ || /\n\n/g;s/"\(.*\)"/\1/'
QUOTE="$(echo "$ROW" | xsv select 4)"
echo "$QUOTE" | sed 's/^"//;s/"$//;s/\s*||\s*/\n\n/g;s/\s*|\s*/\n/g'
echo
AUTHOR="$(echo "$ROW" | xsv select 1)"
# Prepare the output
ATTRIBUTION="($AUTHOR"
SOURCE="$(echo "$ROW" | xsv select 2)"
# Add SOURCE if it's not empty
if [ -n "$SOURCE" ]; then
ATTRIBUTION="$ATTRIBUTION: $SOURCE"
fi
LOC="$(echo "$ROW" | xsv select 3 | sed 's/""//;s/-//g')"
# Add LOC if it's not empty
if [ -n "$LOC" ]; then
ATTRIBUTION="$ATTRIBUTION, $LOC"
fi
ATTRIBUTION="$ATTRIBUTION)"
echo "$ATTRIBUTION"
)
''

View File

@@ -10,7 +10,7 @@ stdenv.mkDerivation {
src = fetchgit {
url = "https://github.com/jgm/pandoc";
rev = pandoc.version;
sha256 = "sha256-8mkHbHoXrkgcXZ/rYlVh2fhL12WjcTt97a1W+oYVYOs=";
hash = "sha256-4VDfRUr6TyF4oZsCve9t6FlEN0AqzYdlYXRny+SAcsY=";
};
buildPhase = ''
mkdir -p $out/man/man1

16
packages/mpv-iptv.nix Normal file
View File

@@ -0,0 +1,16 @@
{
mpv,
writers,
}:
writers.writeDashBin "iptv" ''
set -efu
${mpv}/bin/mpv \
--audio-display=no --audio-channels=stereo \
--audio-samplerate=48000 --audio-format=s16 \
--ao-pcm-file=/run/snapserver/snapfifo --ao=pcm \
--audio-delay=-1 \
--playlist=https://iptv-org.github.io/iptv/index.nsfw.m3u \
--idle=yes \
--input-ipc-server=/tmp/mpv.ipc \
"$@"
''

View File

@@ -7,6 +7,8 @@
coreutils,
gnused,
di-fm-key-file,
executableName ? "mpv-radio",
mpvCommand ? "${mpv}/bin/mpv --force-window=yes"
}: let
streams = import ../lib/streams.nix {
di-fm-key = "%DI_FM_KEY%";
@@ -19,11 +21,13 @@
}: "${station}\t${desc}\t${stream}")
streams);
in
writers.writeDashBin "mpv-radio" ''
writers.writeDashBin executableName ''
set -x
if [ -z ''${DI_FM_KEY} ]; then
DI_FM_KEY=$(cat "${di-fm-key-file}")
fi
exec ${mpv}/bin/mpv --force-window=yes "$(
exec ${mpvCommand} "$(
${dmenu}/bin/dmenu -i -l 5 < ${streams-tsv} \
| ${coreutils}/bin/cut -f3 \
| ${gnused}/bin/sed s/%DI_FM_KEY%/"$DI_FM_KEY"/

View File

@@ -2,15 +2,23 @@
pkgs,
lib,
}: let
streams-tsv = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/jnk22/kodinerds-iptv/master/iptv/kodi/kodi_tv.m3u";
sha256 = "sha256-gbHV37Yo+D3TYfDXZyb9IX8aRsguZ3qG2SYlY8NsTL0=";
postFetch = ''
${pkgs.gnused}/bin/sed '/#EXTM3U/d;/#EXTINF/s/.*,//g' $out | ${pkgs.coreutils}/bin/paste -d'\t' - - > $out.tmp
mv $out.tmp $out
'';
m3u-to-tsv = ''
${pkgs.gnused}/bin/sed '/#EXTM3U/d;/#EXTINF/s/.*,//g' $out | ${pkgs.coreutils}/bin/paste -d'\t' - - > $out.tmp
mv $out.tmp $out
'';
live-tv = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/Free-TV/IPTV/39a573d7a428ca1b2ffeec422751a01d37e59e94/playlist.m3u8";
hash = "sha256-GBJBJN1AwwtO8HYrD0y3/qPCiK48IXyjt93s6DF/7Yo=";
postFetch = m3u-to-tsv;
};
kodi-tv = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/jnk22/kodinerds-iptv/3f35761b7edcfb356d22cac0e561592ba589c20b/iptv/kodi/kodi_tv.m3u";
sha256 = "sha256-EZEshHWUejLTy6qsBhELfaYdDpQ/uqPsZa1JA0mb7h0=";
postFetch = m3u-to-tsv;
};
in
pkgs.writers.writeDashBin "mpv-tv" ''
exec ${pkgs.mpv}/bin/mpv --force-window=yes "$(${pkgs.dmenu}/bin/dmenu -i -l 5 < ${streams-tsv} | ${pkgs.coreutils}/bin/cut -f2)"
cat ${kodi-tv} ${live-tv} | ${pkgs.mpv}/bin/mpv --force-window=yes "$(${pkgs.dmenu}/bin/dmenu -i -l 5 | ${pkgs.coreutils}/bin/cut -f2)"
''

17
packages/noise-waves.nix Normal file
View File

@@ -0,0 +1,17 @@
{ sox, mpv, writers, coreutils }:
# ref https://askubuntu.com/a/789472
writers.writeDashBin "noise-waves" ''
file="/tmp/noise-$(${coreutils}/bin/date +%s | ${coreutils}/bin/md5sum | ${coreutils}/bin/cut -d' ' -f1).wav"
trap clean EXIT
clean() {
rm "$file"
}
${coreutils}/bin/mkfifo "$file"
${sox}/bin/sox -c2 -r44.1k -b8 -n "$file" synth brownnoise synth pinknoise mix synth sine amod 0.3 10 &
${mpv}/bin/mpv "$file"
''
# play -c2 -r44.1k -b8 -n synth -1 brownnoise .1 40
# play -c2 -r44.1k -b8 -n synth -1 pinknoise .1 60

View File

@@ -4,7 +4,7 @@
rofi,
findutils,
coreutils,
noteDirectory ? "~/cloud/syncthing/obsidian",
noteDirectory ? "~/state/obsidian",
currentDates ? false,
niveumPackages,
}:

View File

@@ -1,7 +1,7 @@
{
neovim,
vimPlugins,
obsidiantVaultDirectory ? "~/cloud/syncthing/obsidian/",
obsidiantVaultDirectory ? "~/state/obsidian/",
...
}:
neovim.override {
@@ -15,6 +15,9 @@ neovim.override {
let g:vimwiki_listsyms = ' X'
let g:vimwiki_commentstring = '<!--%s-->'
let mapleader = ","
nmap <Leader>r :NERDTreeFocus<cr>R<c-w><c-p>
let g:vimwiki_list = [{
\ 'path': '${obsidiantVaultDirectory}',
\ 'syntax': 'markdown',

View File

@@ -30,10 +30,27 @@
"that's a good song!"
"👍"
"vibin'"
"this is a jam!"
"absolutely love it!"
"such a vibe!"
"this track is fire!"
"feeling this one!"
"pure gold!"
"this is my jam!"
"so catchy!"
"on repeat!"
"this is a masterpiece!"
"let's dance!"
"I'm all in!"
"so gut!"
"mega!"
"ich fühl's!"
"das ist Musik für die Seele!"
];
messages.bad = [
"how can anyone listen to this?"
"(°° "
"(°° "
"skip this!"
"next, please! i'm suffering!"
"that's just bad music"
@@ -43,12 +60,40 @@
"turn that down"
"make it stooop"
"noooo"
"this is painful to listen to"
"what is this noise?"
"not my cup of tea"
"this is a hard pass"
"yikes!"
"please no more"
"this is a disaster"
"I can't handle this"
"this is just wrong"
"let's skip this one"
"ugh, why?"
"definitely not a fan"
"wie kann man das hören?"
"das ist schrecklich!"
"bitte nicht!"
"das ist einfach schlecht"
"oh nein, nicht das!"
];
messages.neutral = [
"meh"
"i have no opinion about this song"
"idk man"
"it's okay"
"not bad, not great"
"just average"
"it's fine"
"i can take it or leave it"
"kann man hören"
"ist in ordnung"
"naja"
"nicht schlecht, nicht gut"
"ich kann damit leben"
"es ist was es ist"
];
in
writers.writeDashBin "pls" ''

107
packages/polyglot.nix Normal file
View File

@@ -0,0 +1,107 @@
{
writers,
mpv,
}: let
arabicStories = "/home/kfm/cloud/syncthing/music/Arabic/Stories";
levantineTextbook = "/home/kfm/cloud/syncthing/music/Arabic/Damaszenisch";
in
writers.writeDashBin "polyglot" ''
languages='persian
arabic
coptic
sanskrit
levantine
hebrew'
kurdish="https://www.youtube.com/channel/UCvutKJerMREoQtzXiQaDNBQ
https://www.youtube.com/channel/UCdqSEXLhnsltwN4IESMInDA"
persian="https://www.youtube.com/playlist?list=PL4aDVDOklYH5MnXNjCeRalFuRZ46I_p8Q
https://www.youtube.com/playlist?list=PL4aDVDOklYH404fg2zZoUQR6YcQp4UUrW
https://www.youtube.com/playlist?list=PL4aDVDOklYH4FhJZ4cX14HuUVsDJKUifr
https://www.youtube.com/playlist?list=PL4aDVDOklYH6i_Od0zD4ZFNqmZVBOTo4z
https://www.youtube.com/playlist?list=PL4aDVDOklYH5NuhQvc52KCPO0X64FU_bd
https://www.youtube.com/playlist?list=PL4aDVDOklYH6MFQfuQ5VIJmwuKfR1kgUR
https://www.youtube.com/playlist?list=PL4aDVDOklYH48_uuVl-AAPbkemzZFvnHH
https://www.youtube.com/playlist?list=PL4aDVDOklYH61WM-WmzjZyTFAE7AILb7j
https://www.youtube.com/channel/UCGY0LHNDQjt3GQrrc3r3Atw
https://www.youtube.com/channel/UC4jgHye1-kjDlY-2StrtVtA
https://www.youtube.com/channel/UCf67DKdLhpFW-7c7FZre2Ww
https://www.youtube.com/channel/UCLOGyLCPJL99gNriGAhwl7g
https://www.youtube.com/channel/UCxV5ZfGJjJhrzy_9am-S4QQ
https://www.youtube.com/channel/UCBSF89JJieetWjJTGZhGKJA
https://www.youtube.com/channel/UCFGB29XZkEGS1Vw7WplBqIg
https://www.youtube.com/channel/UChiyq4qjnAWMNhwPu2KL4yg
https://www.youtube.com/channel/UCULxPJn3NjsaXt4Nc-sIZrw
https://www.youtube.com/channel/UCYRyoX3ru_BfMiXVCGgRS6w
https://www.youtube.com/channel/UCbCvjr0v_-8LmZh9431N84w"
hebrew="https://www.youtube.com/playlist?list=PLXU4ackZsIPp2G8XjfpsYso2p3IHyl-bJ
https://www.youtube.com/playlist?list=PLXU4ackZsIPqLOWeWZc1frv3VCAohi90p
https://www.youtube.com/playlist?list=PLXU4ackZsIPpWWdWvtM3UtZHFKFhmI2mj
https://www.youtube.com/playlist?list=PLXU4ackZsIPoz05eaLCHsCv4Wrk4n1g34
https://www.youtube.com/channel/UCrMYJpbMhhQZhXi4ui3FKEw
https://www.youtube.com/playlist?list=PLXU4ackZsIPombqx98SIPanShjSUSlBW-
https://www.youtube.com/playlist?list=PLXU4ackZsIPrdSFUjNdw3eGK-qbtgqt-6
https://www.youtube.com/playlist?list=PLXU4ackZsIPrVHjB4P9QrYzJvBKD3MLuA
https://www.youtube.com/playlist?list=PLXU4ackZsIPp_7fb7TMyOaaX_ORI6vH29
https://www.youtube.com/channel/UCkKmeTinUEU27syZPKrzWQQ
https://www.youtube.com/channel/UC2gy2POCchS7JM_UCsZx5dw
https://www.youtube.com/channel/UCb2bkA-kSUz4Mj5YJv0zpJQ"
arabic="https://www.youtube.com/channel/UCbqqV0gO5QbV9iGITdxp-cw
https://www.youtube.com/channel/UCxNwNoGEhHg7lGOhthG4r6A
https://www.youtube.com/channel/UCmYYUdR85LRVB5yT1Y7DjFA
https://www.youtube.com/channel/UCIgFDroRoDYnxBlOGmwJ78A
https://www.youtube.com/channel/UCn5ASYdp7CzbFH2qtqjIJ9w
https://www.youtube.com/channel/UCD8N8HjsCkCmykfPnVleVRg
https://www.youtube.com/channel/UCEmWUZanVYXEzZXYDHzD-iA
https://www.youtube.com/channel/UC9rnrMdYzfqdjiuNXV7q8oQ
https://live-hls-audio-web-aja.getaj.net/VOICE-AJA/01.m3u8
http://asima.out.airtime.pro:8000/asima_a
http://edge.mixlr.com/channel/qtgru
http://ninarfm.grtvstream.com:8896/stream
http://andromeda.shoutca.st:8189/stream
http://www.dreamsiteradiocp4.com:8014/stream
http://n02.radiojar.com/sxfbks1vfy8uv.mp3
http://stream-025.zeno.fm/5y95pu36sm0uv
${arabicStories}"
levantine_general="https://www.youtube.com/channel/UCe6YxTdT2zsbhG8ThAEssLw
https://www.youtube.com/channel/UC8IsrQ3Fvg1X2QboSRIMBHA
https://www.youtube.com/channel/UCo65IZihlwP204bleDDuAyA
https://www.youtube.com/channel/UCDXBymJu72YX2LzKVlZyZaA
https://www.youtube.com/channel/UCpovzufzZSP3kCYm16B5Hyw
https://www.youtube.com/channel/UCKkKlH7eJFBWhofiP5kQEFQ
https://www.youtube.com/channel/UC-YYp3mws0sa9vI3VUCWqhw
https://www.youtube.com/channel/UCpa9WD4btPSyn0h-DZSATGw
https://www.youtube.com/channel/UCb7oMrqwZnr3ZCayqnkkb8w
https://www.youtube.com/channel/UCuLNZirpkm2HYxq-tTiXnOA
https://www.youtube.com/channel/UCSGBoIBGUxUmpTYJfYZXs-A
https://www.youtube.com/channel/UCPINCItSdAc7SBXxi6AcWpw
https://www.youtube.com/channel/UCbZvzUBn04a_a95HFMX6eTA
https://www.youtube.com/channel/UChJs6Kqju9BmN5FMHhBfRSA
https://www.youtube.com/channel/UCyC7OV3gEQkguVwl9qDGuTQ
https://www.youtube.com/channel/UCwv1qu4iX6Bm6X-uSSB2eBQ
${levantineTextbook}"
sanskrit="https://www.youtube.com/channel/UCTnCQNG_1WIlunxbp1SAOvw
https://stream-23.zeno.fm/m08mkwsyw8quv
https://www.youtube.com/channel/UCqFg6QnwgtVHo1iFgpxrx-A"
language="$(echo "$languages" | shuf -n1)"
case "$language" in
arabic)
${mpv}/bin/mpv --shuffle $arabic;;
persian)
${mpv}/bin/mpv --shuffle $persian;;
coptic)
;;
sanskrit)
${mpv}/bin/mpv --shuffle $sanskrit;;
levantine)
${mpv}/bin/mpv --shuffle $levantine;;
hebrew)
${mpv}/bin/mpv --shuffle $hebrew;;
esac
''

9
packages/q.nix Normal file
View File

@@ -0,0 +1,9 @@
{ writers, lib, todoman, khal, util-linux, wego, pass }:
writers.writeDashBin "q" ''
export PATH=$PATH:${lib.makeBinPath [todoman khal util-linux wego pass]}
(todo list --due 240; echo) &
(khal list today today; echo) &
(cal -3; echo) &
(wego -location Berlin -owm-api-key "$(pass api-keys/openweathermap)" -frontend emoji -days 2; echo) &
wait
''

71
packages/random-zeno.nix Executable file
View File

@@ -0,0 +1,71 @@
{ writers, lib, curl, pup, gnused, coreutils, pandoc, gawk, jq }:
writers.writeDashBin "random-zeno" ''
set -efu
export PATH=${lib.makeBinPath [ curl pup gnused coreutils pandoc gawk jq ]}
root="http://www.zeno.org"
character_limit=350
fetch() {
curl -sSL "$root$1"
}
blacklist='\/Biographie$'
next_links() {
html="$1"
echo "$html" | pup '.zenoTXLinkInt attr{href}' | sed "/$blacklist/d"
echo "$html" | pup '.zenoTRNavBottom a attr{href}' | sed "/$blacklist/d"
}
eval_html() {
url="$1"
html="$(fetch "$url")"
links="$(next_links "$html" | sed '/^\s*$/d')"
links_count="$(echo "$links" | wc -l)"
if [ -z "$links" ]
then
random_paragraph="$(echo "$html" | pup '.zenoCOMain p' | tr '\n' ' ' | sed 's/<\/p>/&\n/g')"
[ "$random_paragraph" = null ] && exit
prettify "$url" "$random_paragraph"
else
next_link="$(echo "$links" | shuf -n1)"
eval_html "$next_link"
fi
}
prettify() {
url="$1"
html="$2"
plain_text="$(echo "$html" | tr '\n' ' ' \
| sed \
-e 's/<h[1-6][^>]*>[^<]*<\/h[1-6]>//g' \
-e 's/\[[0-9]*\]\s*//g' \
| pandoc -f html -t plain \
| tr '\n' ' '
)"
truncated=$(echo "$plain_text" | awk -v limit="$character_limit" '
{
for (i = 1; i <= NF; i++) {
word_length = length($i) + 1; # +1 for the space
if (total_length + word_length > limit) {
print "";
break;
} else {
total_length += word_length;
printf "%s ", $i; # Print the word followed by a space
}
}
print "";
}
' | sed 's/\([:,.!?;]\)[^:,.!?;]*/\1 /')
url="$(echo "$url" | jq -sRr @uri)"
printf "%s\n\n%s\n" "$truncated" "$root$url"
}
eval_html "$1"
''

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