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

441 Commits

Author SHA1 Message Date
eafc87415a feat(prometheus): scrape home assistant 2023-09-05 19:23:40 +02:00
1e37581325 feat(i3): add clipmenu shortcut 2023-09-05 11:45:33 +02:00
c63cb4d157 feat: host ledger on ful 2023-09-05 11:45:20 +02:00
88257e9ffb Revert "feat: hledger module"
This reverts commit b9d0258132.
2023-09-03 22:36:23 +02:00
b9d0258132 feat: hledger module 2023-09-03 17:52:37 +02:00
53bbc65716 feat(pandoc): use up-to-date version 2023-09-03 17:50:48 +02:00
e76489b6d8 feat: remove traadfri 2023-08-31 10:09:49 +02:00
github-actions[bot]
f4e2885b86 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/919d646de7be200f3bf08cb76ae1f09402b6f9b4' (2023-07-11)
  → 'github:numtide/flake-utils/f9e7cf818399d17d347f847525c5a5a8032e4e44' (2023-08-23)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/4cdad15f34e6321a2f789b99d42815b9142ac2ba' (2023-08-19)
  → 'github:NixOS/nixpkgs/74e5bdc5478ebbe7ba5849f0d765f92757bb9dbf' (2023-08-25)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/0b6f3e17dda02c9cf1e8edc6e411ba37093f09e2' (2023-08-20)
  → 'github:NixOS/nixpkgs/38b9aaf6682015f1d2fc7b7f48da96992c30cfa3' (2023-08-26)
• Updated input 'nur':
    'github:nix-community/NUR/18436a20915d6cc569d7fb13807a07ae5de10661' (2023-08-19)
  → 'github:nix-community/NUR/0f81f016eecec153a26099beb25b0c8bac87bd23' (2023-08-26)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/598b2f04ed252eb5808b108d7a10084c0c548753' (2023-08-19)
  → 'github:oxalica/rust-overlay/e90223633068a44f0fb62374e0fa360ccc987292' (2023-08-26)
• Updated input 'voidrice':
    'github:Lukesmithxyz/voidrice/f26e5678e626e604ed586fc6420b944dc023d3f2' (2023-08-18)
  → 'github:Lukesmithxyz/voidrice/86f05abcce1fd270032975775adb40040c746cfe' (2023-08-25)
2023-08-27 00:40:57 +00:00
07f5d25e96 feat: remock secrets 2023-08-23 17:42:54 +02:00
b5e9fd73e0 feat: remove mpv-visualizer as it has been upstreamed now 2023-08-23 15:51:56 +02:00
34687dde21 feat: stw-berlin stats 2023-08-23 13:05:09 +02:00
4ce7c7a91a fix: lb subscription 2023-08-23 13:05:09 +02:00
github-actions[bot]
9db408226b flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/07c347bb50994691d7b0095f45ebd8838cf6bc38' (2023-06-27)
  → 'github:nix-community/home-manager/2a6679aa9cc3872c29ba2a57fe1b71b3e3c5649f' (2023-08-15)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/78287547942dd8e8afff0ae47fb8e2553db79d7e' (2023-08-08)
  → 'github:NixOS/nixpkgs/4cdad15f34e6321a2f789b99d42815b9142ac2ba' (2023-08-19)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/ce5e4a6ef2e59d89a971bc434ca8ca222b9c7f5e' (2023-08-10)
  → 'github:NixOS/nixpkgs/0b6f3e17dda02c9cf1e8edc6e411ba37093f09e2' (2023-08-20)
• Updated input 'nur':
    'github:nix-community/NUR/bbb14c7521967ffbeb0a492a1bd209e0369be648' (2023-08-10)
  → 'github:nix-community/NUR/18436a20915d6cc569d7fb13807a07ae5de10661' (2023-08-19)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=e29c0b48310d4520a4beb9782e94949ae43ab1ae' (2023-07-30)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=6216c30551876303dac5373e92690a7f05fd0f6f' (2023-08-14)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/48f3d76f512c7267d82d84c5d3d156ad2b9a8d12' (2023-08-10)
  → 'github:oxalica/rust-overlay/598b2f04ed252eb5808b108d7a10084c0c548753' (2023-08-19)
• Updated input 'voidrice':
    'github:Lukesmithxyz/voidrice/d8a8970715070f73bcb6333e3fe851b6802ac702' (2023-07-23)
  → 'github:Lukesmithxyz/voidrice/f26e5678e626e604ed586fc6420b944dc023d3f2' (2023-08-18)
2023-08-20 00:40:09 +00:00
8ea79b574b chore: update 2023-08-10 10:49:08 +02:00
bcb0878765 fix(grafana, nextcloud): remove smtp config 2023-08-09 10:48:36 +02:00
365aa29897 fix(grafana): remove smtp config 2023-08-09 09:29:51 +02:00
cfb782da7f Merge branch 'update_flake_lock_action' 2023-08-09 09:26:29 +02:00
e721abeb6c fix(vim): clean up 2023-08-07 15:38:54 +02:00
249e8c016d fix(fzf): preview commands 2023-08-07 14:22:47 +02:00
3be3410baa feat(stardict): install coptic dictionary 2023-08-07 13:26:53 +02:00
af0bd29cd5 chore: mock secrets 2023-08-06 21:22:33 +02:00
75827becf9 fix(fu-berlin): blackboard calendar 2023-08-06 21:19:08 +02:00
48438f758e feat: move email/ssh to fysi/hu-berlin/fu-berlin 2023-08-06 21:18:56 +02:00
3538692b60 feat(i3): enable gaps 2023-08-06 18:58:48 +02:00
42d1382b74 fix(editorconfig): python and makefile 2023-08-06 18:58:31 +02:00
31d86b7c9f feat(hu-berlin): add gruenau6 server configuration 2023-08-06 18:58:10 +02:00
6532016f96 feat(fu-berlin): liberalize blackboard calendar permissions 2023-08-06 18:57:52 +02:00
65c1704b46 feat: hello, FU! 2023-08-06 18:53:40 +02:00
github-actions[bot]
9f0cb708f2 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/48e82fe1b1c863ee26a33ce9bd39621d2ada0a33' (2023-07-28)
  → 'github:NixOS/nixpkgs/9652a97d9738d3e65cf33c0bc24429e495a7868f' (2023-08-04)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/4b4b4cf51b42616bc2de1c8fb92ec6a7ba862071' (2023-07-30)
  → 'github:NixOS/nixpkgs/97bd658852ce0efbdc4d9ca84ad466a4cbfb1cf4' (2023-08-05)
• Updated input 'nur':
    'github:nix-community/NUR/612e4e11ca96d2c205053a74ab3949c516a7e4ec' (2023-07-30)
  → 'github:nix-community/NUR/dcb1bbf571d2c3972a85058a398925c51db7655a' (2023-08-06)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=6c500ce24e1234d498e4da9718065ce154579192' (2023-07-28)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=e29c0b48310d4520a4beb9782e94949ae43ab1ae' (2023-07-30)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/05d480a7aef1aae1bfb67a39134dcf48c5322528' (2023-07-30)
  → 'github:oxalica/rust-overlay/18ee2a71de24273e4ad4503b5604532f0b53f382' (2023-08-05)
2023-08-06 00:42:40 +00:00
ee2dcc3669 feat(neovim): luasnip and supertab 2023-08-02 10:20:03 +02:00
b5f50967b4 feat(neovim): use editorconfig for stripping trailiing whitespace 2023-08-01 17:09:59 +02:00
747402bca4 feat(restic): backup whole hass volume 2023-07-31 22:26:11 +02:00
5876839e4d chore: build makanek locally 2023-07-31 22:25:57 +02:00
bb79707693 chore: update 2023-07-31 22:25:46 +02:00
6c72666ed6 fix: newGardiner checksum 2023-07-31 22:25:26 +02:00
github-actions[bot]
ff84da3d32 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/f3fbbc36b4e179a5985b9ab12624e9dfe7989341' (2023-07-26)
  → 'github:NixOS/nixpkgs/48e82fe1b1c863ee26a33ce9bd39621d2ada0a33' (2023-07-28)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/7d053c812bb59bbb15293f9bb6087748e7c21b1a' (2023-07-27)
  → 'github:NixOS/nixpkgs/4ad78e3e98fabb3e4af3bd1a21dadb123aa85b5d' (2023-07-30)
• Updated input 'nur':
    'github:nix-community/NUR/e5381dfacea6a370383d95ade73bccc99460eb78' (2023-07-27)
  → 'github:nix-community/NUR/e731d694c01b2e17ebb7edfb26442d0124b795a4' (2023-07-30)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=966f656268a2d823ee5faf26954640e4b0b29aa7' (2023-07-09)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=6c500ce24e1234d498e4da9718065ce154579192' (2023-07-28)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/f335a0213504c7e6481c359dc1009be9cf34432c' (2023-07-27)
  → 'github:oxalica/rust-overlay/5c06b0ed7bfb00f3a925af6c4acd1636596381c1' (2023-07-29)
• Updated input 'stylix':
    'github:danth/stylix/5c829554280f3139ddbfce8561d7430efbf2abfb' (2023-07-27)
  → 'github:danth/stylix/c29f2e6f9d0326a690d0c2376712e9134ad8f5c8' (2023-07-29)
2023-07-30 00:49:18 +00:00
71575ad289 chore: update 2023-07-27 17:44:22 +02:00
0fd9283218 feat(i3): restitute window border for floating windows 2023-07-27 17:06:17 +02:00
83a949eddc feat: generate wallpaper 2023-07-27 17:05:48 +02:00
7f057a7657 fix(fzf): preview commands 2023-07-27 14:47:41 +02:00
35fcfc26c3 feat(fzf): configure via home-manager so stylix gets it 2023-07-27 14:39:26 +02:00
9b48a5557e fix(manakish): remove unused version 2023-07-27 14:25:20 +02:00
ddbcf5dfc4 feat(stylix): change wallpaper 2023-07-26 10:42:12 +02:00
31469cef9d feat(stylix): use a different theme each update 2023-07-26 10:39:42 +02:00
dbeb0acc11 feat(stylix): set base16 theme 2023-07-26 08:55:50 +02:00
ba449d7c69 chore: clean up 2023-07-26 08:18:28 +02:00
6940e1d8f9 feat: set cursor theme 2023-07-26 08:18:09 +02:00
a8940bf667 feat: stylix is my new best friend 2023-07-26 07:39:44 +02:00
92bf5ab0ee fix(mpd): integrate di.fm secret into playlist 2023-07-25 16:19:31 +02:00
2d1e11c0e7 chore: format 2023-07-25 16:19:31 +02:00
66b01774c3 feat(restic): ignore parcel cache 2023-07-25 16:19:31 +02:00
026c2e5631 feat(nextcloud): require storagebox mount 2023-07-24 20:03:52 +02:00
d51c120bc8 feat(moto): tmux, hledger 2023-07-24 06:33:51 +00:00
33b8201371 feat(moto): set nix path 2023-07-23 23:12:35 +02:00
6d9278680f feat(nix-on-droid): use fish 2023-07-23 00:31:03 +02:00
45972f524b feat(nix-on-droid): use nice bash prompt 2023-07-23 00:26:10 +02:00
915695cb0b feat(home-assistant): activate zigbee dongle 2023-07-22 23:43:46 +02:00
b4c513001c feat: add android tools 2023-07-22 23:43:46 +02:00
7551fd5a58 feat: nix-on-droid for moto-g5 2023-07-22 23:43:46 +02:00
69aa19e9d3 feat(restic): backup www.kmein.de state 2023-07-20 20:46:40 +02:00
277200d007 fix: update mock secrets 2023-07-20 19:35:09 +02:00
816bdbb730 feat(nginx): host www stuff 2023-07-20 19:32:26 +02:00
c731b57fd3 feat: build thinkpad locally 2023-07-20 19:30:39 +02:00
e52a9fdb56 feat(picom): quit shenanigans 2023-07-18 13:13:08 +02:00
f2c08c0cfd feat: bye seafile 2023-07-17 08:31:34 +02:00
cc1fa52b31 feat: hetzner storagebbox for nextcloud 2023-07-16 08:53:56 +02:00
f1284df54b chore: update 2023-07-16 08:20:56 +02:00
0536e762ea feat(nextcloud): change domain 2023-07-16 08:20:47 +02:00
2b2db14519 feat(vim): disable cmp buffer source 2023-07-15 23:08:05 +02:00
30619a6322 feat(radio): allow setting DI_FM_KEY as env variable 2023-07-15 22:53:14 +02:00
2bd218887b feat: more and the right language servers 2023-07-14 17:19:23 +02:00
0cdcd46808 feat(streams): other di streams 2023-07-14 17:19:10 +02:00
7a2a6217c4 feat(mpd): add mukke 2023-07-13 22:13:22 +02:00
bfb7ed3b5a fix(kpaste): also show non-retiolum address
this also fixes panoptikon
2023-07-12 15:18:18 +02:00
3e591784c6 chore: update secrets 2023-07-12 15:02:43 +02:00
657c4fd673 fix(spotifyd): disable dbus 2023-07-12 12:32:04 +02:00
a4b659f057 feat(vim): remove empty lines at end of file, fix nohlsearch 2023-07-12 12:31:50 +02:00
99be0277b1 feat(restic): backup home-assistant 2023-07-12 12:30:16 +02:00
6c2db1b0fb feat(vim): remove empty lines at end of file, fix nohlsearch 2023-07-12 12:30:16 +02:00
github-actions[bot]
0f8ada7194 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/b72aa95f7f096382bff3aea5f8fde645bca07422' (2023-06-30)
  → 'github:NixOS/nixpkgs/d8bb6c681cf86265fdcf3cc3119f757bbb085835' (2023-07-07)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/3eb8ccf3b3922be5586a263e7d6f4f98e3acf728' (2023-07-02)
  → 'github:NixOS/nixpkgs/651beb2a23fb0ae7939c5e0d3c645f487fdaa448' (2023-07-09)
• Updated input 'nur':
    'github:nix-community/NUR/8993e5d37ab3ec80883751b5d86d48e9b74bed43' (2023-07-02)
  → 'github:nix-community/NUR/7a85833f758ac5ad9f6e3620cf1445f7907073e3' (2023-07-09)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=5204150c92b7c412a3331337ef73b0eb0f01f6ba' (2023-07-01)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=4e2f9841ea09012261fca1c7e734f449ca39d55a' (2023-07-08)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/ef95001485c25edb43ea236bdb03640b9073abef' (2023-07-01)
  → 'github:oxalica/rust-overlay/7a29283cc242c2486fc67f60b431ef708046d176' (2023-07-08)
2023-07-12 12:29:35 +02:00
e9b4fb12c7 feat: improve obsidian-vim 2023-07-10 09:36:27 +02:00
24f838370d feat: make obsidian-vim and neovim bearable 2023-07-09 23:26:49 +02:00
074e229d5f feat: follow nvim-cmp tutorial, initialize vim-obsidian 2023-07-09 16:32:57 +02:00
b953ccae12 feat(neovim): completion via cmp 2023-07-04 22:11:22 +02:00
4f5782fbc4 feat: kick beets down the stairs 2023-07-04 21:43:37 +02:00
8ae328ad19 fix(ci): submodules and it works! 2023-07-04 17:06:32 +02:00
9148ab5ba8 Revert "chore: get secrets via input, mock for CI"
This reverts commit 3138fd23ef.
2023-07-04 16:28:26 +02:00
17bf958923 Merge remote-tracking branch 'origin/update_flake_lock_action' 2023-07-04 15:03:26 +02:00
e08ffb4d44 feat(notemenu): use as flake package 2023-07-04 10:12:38 +02:00
0cbf18fb1a feat(themes): switch gtk theme 2023-07-04 09:56:23 +02:00
332d192aaf fix(secrets): fysi email 2023-07-04 09:48:57 +02:00
f52a5c43c3 feat(i3status-rust): time every 10 seconds 2023-07-04 09:41:46 +02:00
94315fae99 chore: format 2023-07-04 09:40:29 +02:00
76232658c2 feat(htop): no tree 2023-07-04 09:40:12 +02:00
bcac6e29d5 feat: migrate notes workflow to obsidian completely 2023-07-04 09:40:00 +02:00
github-actions[bot]
7a99500f72 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/abfb11bd1aec8ced1c9bb9adfe68018230f4fb3c' (2023-06-19)
  → 'github:numtide/flake-utils/dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7' (2023-06-25)
• Updated input 'home-manager':
    'github:nix-community/home-manager/6ca1e16eb3016c94b7ac16699e1d4158bd4e39a4' (2023-06-24)
  → 'github:nix-community/home-manager/07c347bb50994691d7b0095f45ebd8838cf6bc38' (2023-06-27)
• Updated input 'nixinate':
    'github:matthewcroughan/nixinate/b4d17b8e2a4abc47e93e1a1c466e0286a63640d8' (2022-12-15)
  → 'github:matthewcroughan/nixinate/7902ae845e6cc5bd450e510cdf5e009a6e4a44d9' (2023-06-30)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/ecb441f22067ba1d6312f4932a7c64efa8d19a7b' (2023-06-22)
  → 'github:NixOS/nixpkgs/b72aa95f7f096382bff3aea5f8fde645bca07422' (2023-06-30)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/b154feadb9abd34350360a80cb4b7e6ce8525a75' (2023-06-25)
  → 'github:NixOS/nixpkgs/3eb8ccf3b3922be5586a263e7d6f4f98e3acf728' (2023-07-02)
• Updated input 'nur':
    'github:nix-community/NUR/9eed2d0c604236451550cede1095b94bc8897133' (2023-06-25)
  → 'github:nix-community/NUR/8993e5d37ab3ec80883751b5d86d48e9b74bed43' (2023-07-02)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=f79b533caf30820d93a79878d871c08faa35b3f4' (2023-06-06)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs/heads/master&rev=5204150c92b7c412a3331337ef73b0eb0f01f6ba' (2023-07-01)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/ec002586144fe0f48039dced270c188f0b8213ab' (2023-06-24)
  → 'github:oxalica/rust-overlay/ef95001485c25edb43ea236bdb03640b9073abef' (2023-07-01)
• Updated input 'secrets':
    'path:./secrets?lastModified=1&narHash=sha256-D9ZMDdN7FOG%2Bx8Ds2FuBUz/ujRLjJ07rxiV8AFuEqbQ%3D' (1970-01-01)
  → 'path:./secrets?lastModified=1&narHash=sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo%3D' (1970-01-01)
2023-07-02 00:59:43 +00:00
3138fd23ef chore: get secrets via input, mock for CI
this fixes CI, yay!
2023-06-27 20:13:09 +02:00
d0edb9c915 feat(syncthing): sync zotero 2023-06-27 17:57:26 +02:00
120a50db3b feat(fonts): coptic and correct arabic 2023-06-27 17:50:07 +02:00
3736b99603 fix: moodle-dl nfs 2023-06-27 17:49:56 +02:00
6db3928a47 fix: ci 2023-06-26 16:03:19 +02:00
d980fe6da5 fix(zaatar): remove moodle-dl fully 2023-06-26 15:26:25 +02:00
a599e5a64b Merge remote-tracking branch 'origin/update_flake_lock_action' 2023-06-26 15:11:38 +02:00
6dd286b2bf fix(hu-berlin): vpn 2023-06-26 14:27:27 +02:00
github-actions[bot]
da77e733c1 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/ac53777f52929bc82efcd2830bfc5aa60bcb4337' (2023-06-19)
  → 'github:nix-community/home-manager/6ca1e16eb3016c94b7ac16699e1d4158bd4e39a4' (2023-06-24)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/b6c73c5fe53bb3afbf65e870541e0645e9145171' (2023-06-20)
  → 'github:NixOS/nixpkgs/ecb441f22067ba1d6312f4932a7c64efa8d19a7b' (2023-06-22)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/b3f5bcf0be3e15226b0e9d698aa734ee098aa08f' (2023-06-21)
  → 'github:NixOS/nixpkgs/b154feadb9abd34350360a80cb4b7e6ce8525a75' (2023-06-25)
• Updated input 'nur':
    'github:nix-community/NUR/e8ce8c69a1bb0d0852da6c7a8d67f112d940ac81' (2023-06-21)
  → 'github:nix-community/NUR/9eed2d0c604236451550cede1095b94bc8897133' (2023-06-25)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/417dc5995703ea9edcce098ad59bb4511271cb73' (2023-06-21)
  → 'github:oxalica/rust-overlay/ec002586144fe0f48039dced270c188f0b8213ab' (2023-06-24)
2023-06-25 01:02:26 +00:00
b62bde780d feat: unleash moinbot on #hsmr 2023-06-23 15:42:58 +02:00
4584d92d05 feat(graph.r): use correct center 2023-06-23 15:42:49 +02:00
1bbf54fcd8 feat(neovim): export as package from flake 2023-06-22 21:01:00 +02:00
14fe8b6c3a chore: update 2023-06-22 08:38:06 +02:00
69ff902e78 fix(gpt): use api key command arg 2023-06-21 10:41:12 +02:00
cb995b0ad9 feat: install haskell 2023-06-21 10:41:12 +02:00
9a1a18bc69 feat(moodle-dl): disable 2023-06-14 22:15:49 +02:00
22405aebf0 fix(hu-berlin): fortinet ssl vpn 2023-06-14 08:34:46 +02:00
40e8a1ad5c feat(gcc) 2023-06-13 14:17:35 +02:00
e44460ca3c feat: good bye channels 2023-06-13 14:17:29 +02:00
89d8347a34 feat: Zotero 2023-06-13 10:50:58 +02:00
5d0a6fe3dd fix(hdmi): rename hdmi display 2023-06-12 21:14:35 +02:00
64a59070c4 feat: xml packages 2023-06-10 14:07:29 +02:00
c68f863bbc feat(zaatar): fix kiosk, spotifyd, containers warning 2023-06-10 13:56:55 +02:00
fa3d41fb5b feat(kiosk): note why no tap 2 click 2023-06-10 13:55:32 +02:00
881aaa3f8c chore: update retiolum 2023-06-07 10:30:12 +02:00
dcd00ad602 fix(wallpaper): update url 2023-06-07 10:29:49 +02:00
56e4d710e5 fix: atuin, nachtischsatan 2023-06-07 10:27:02 +02:00
8967f860e8 feat(atuin): use module 2023-06-06 20:40:31 +02:00
ed6e777497 fix(telebots): reenable 2023-06-06 20:40:20 +02:00
7cbad0c877 feat(fzf): use module 2023-06-06 20:38:56 +02:00
f9326b19ab feat: upgrade to 23.05 2023-06-06 19:59:27 +02:00
479742c5a5 feat(streams): add one more todo 2023-06-05 10:26:00 +02:00
336f0e6311 feat: obsidian 2023-06-04 15:43:22 +02:00
bbc0467e3d feat(zaatar): remove kiosk 2023-05-28 23:30:24 +02:00
a90c04e077 Revert "feat(zaatar): gnome"
This reverts commit 22a7980100.
2023-05-28 23:21:18 +02:00
22a7980100 feat(zaatar): gnome 2023-05-28 20:33:50 +02:00
de40ace55c Merge remote-tracking branch 'origin/update_flake_lock_action' 2023-05-23 11:44:18 +02:00
aea1a975c0 fix(khal): do not obscure errors 2023-05-23 11:44:04 +02:00
github-actions[bot]
bf12137fac flake.lock: Update
Flake lock file updates:

• Updated input 'agenix':
    'github:ryantm/agenix/92197270a1eedd142a4aff853e4cc6d1e838c22f' (2023-05-12)
  → 'github:ryantm/agenix/db5637d10f797bb251b94ef9040b237f4702cde3' (2023-05-15)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/9656e85a15a0fe67847ee8cdb99a20d8df499962' (2023-05-12)
  → 'github:NixOS/nixpkgs/628d4bb6e9f4f0c30cfd9b23d3c1cdcec9d3cb5c' (2023-05-18)
• Updated input 'nixpkgs-unstable':
    'github:NixOS/nixpkgs/d5be467efe20bd71fb178f9fcbc032a2a52a55ea' (2023-05-14)
  → 'github:NixOS/nixpkgs/58073d1b85c40d21c58aa856c647f14f8655e05e' (2023-05-21)
• Updated input 'nur':
    'github:nix-community/NUR/f3b31a6e1a397412d4c3afe5b508674cbfce2cee' (2023-05-14)
  → 'github:nix-community/NUR/bad097b7d052e6b273954ca714ca294e6c196b78' (2023-05-21)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/aa1480f16bec7dda3c62b8cdb184c7e823331ba2' (2023-05-14)
  → 'github:oxalica/rust-overlay/f7c0c7f4b0780f977808de0bc0475ab044d3fd08' (2023-05-20)
2023-05-21 00:49:04 +00:00
3cae1306ca chore: secrets 2023-05-20 10:12:41 +02:00
a976daccb1 feat(streams): get rekt 2023-05-20 10:11:41 +02:00
f318ff5ac7 chore: update, enable unstable 2023-05-17 11:16:05 +02:00
61df3fcc89 feat(fonts): add IPAex CJK font 2023-05-17 11:15:53 +02:00
ba7f1ae0db Revert "feat(manakish): add autorandr for dock switch"
This reverts commit fdaa98886e.
2023-05-08 08:46:01 +02:00
12b79916da chore: update 2023-05-07 19:41:51 +02:00
574bcc5b85 feat(vim): add typst plugin 2023-05-07 19:36:08 +02:00
20c92a8b2f fix(flake): reduce number of nixpkgs 2023-05-07 19:36:00 +02:00
f2b1b9d9a1 feat(panoptikon): kpaste text/plain 2023-05-03 12:34:57 +02:00
c17884a519 feat(kleim): add gpt, do not remove newlines 2023-05-03 12:34:39 +02:00
8be6375bcb feat(hora-filli): first of month 2023-05-03 12:34:08 +02:00
5ac1f33e2b chore: update 2023-04-30 15:42:16 +02:00
d64142e32c feat(keyboard): add gothic 2023-04-30 15:42:10 +02:00
a1654b1d1d feat(moodle-dl): add predigten 2023-04-27 13:06:20 +02:00
3f7d548925 feat(git): auto-setup remote 2023-04-25 11:20:47 +02:00
68a2f739af chore: update 2023-04-24 08:42:26 +02:00
9fd968ff62 fix(onlyoffice): make readable 2023-04-24 06:38:43 +02:00
8811aeaff9 chore: format 2023-04-23 09:37:25 +02:00
8d5cd55239 fix(panoptikon): only watch github ssh keys 2023-04-23 09:37:11 +02:00
44ac94ef38 feat(moodle-dl): x-tutorial 2023-04-21 15:52:52 +02:00
cb832d06d3 feat(moodle-dl): sorbisch 2023-04-20 14:15:17 +02:00
1bc7b16fd7 feat(moodle-dl): jiddisch 2023-04-19 16:18:45 +02:00
52c18d1464 feat(moodle-dl): taa 2023-04-19 16:16:07 +02:00
85a6a92836 feat(makanek): disable email alerts 2023-04-18 23:36:48 +02:00
a6232b1a5e feat: convenient deploy script 2023-04-18 23:36:48 +02:00
63b8c7ff1e feat(khal): add krebs kalender 2023-04-18 22:46:37 +02:00
4fcbe70f5e feat(nextcloud): enable onlyoffice 2023-04-18 16:07:42 +02:00
4ae3824663 feat(colours): increase contrast on owickstrom 2023-04-18 16:07:42 +02:00
f83b5f3021 feat(colours): increase contrast on owickstrom 2023-04-18 11:03:40 +02:00
github-actions[bot]
6e54579e26 flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/87edbd74246ccdfa64503f334ed86fa04010bab9' (2023-04-12)
  → 'github:NixOS/nixpkgs/fda0d99c2cbbb5c89d8855d258cb0821bd9113ad' (2023-04-14)
• Updated input 'nur':
    'github:nix-community/NUR/8a35714f0be00235e2a1c8b759e6dc3888763d8b' (2023-04-14)
  → 'github:nix-community/NUR/c9e3bd49580c525989f6ce9803e1c5875ab8548a' (2023-04-15)
2023-04-16 00:46:22 +00:00
626018f3f8 chore: remove itools, itl for now 2023-04-15 08:46:25 +02:00
6fddca2a0b feat(moodle-dl): add new courses 2023-04-15 08:45:50 +02:00
dee8b4e133 fix(stardict): turkish hashes 2023-04-14 10:48:08 +02:00
9456adc0b5 chore: update 2023-04-14 08:42:59 +02:00
d6372b8d8e feat(stardict): add turkish 2023-04-14 08:42:22 +02:00
5da8218a8f feat(streams): add more 2023-04-01 17:46:56 +02:00
17cbff9917 feat(radio): add qasida arabic poetry radio 2023-04-01 17:46:48 +02:00
d72c234adb fix(weechat): disable matrix for now 2023-03-31 11:00:01 +02:00
ffc5f9b596 fix(panoptikon): add watcher name to commit message, random delay 1h, ignore html errors, #xxx notification 2023-03-31 10:59:52 +02:00
c20a9e3098 feat(flake): override mpv and dmenu for own packages 2023-03-30 19:16:54 +02:00
7759cfb35f feat(panoptikon): add library to flake outputs and use 2023-03-30 19:16:54 +02:00
b7a5c3c333 chore: update 2023-03-28 22:28:51 +02:00
672257fc04 fix: hu-vpn conflicts with hu-eduroam 2023-03-28 11:03:20 +02:00
fada909105 feat(panoptikon): setup in different service 2023-03-27 09:27:44 +02:00
96d44a52f0 feat: install agenix package 2023-03-27 09:27:30 +02:00
22f957ee1f fix(weechat): do not delete secrets on startup 2023-03-26 20:22:44 +02:00
13e674389d feat: independence from stockholm 2023-03-26 19:24:38 +02:00
f805550ff8 fix(panoptikon) 2023-03-26 19:14:57 +02:00
a8db4ab8a8 fix(panoptikon): tellonym has ads now 2023-03-26 00:41:59 +01:00
83efbcd61c feat(panoptikon): start more gentle 2023-03-26 00:26:57 +01:00
246b4e1cec chore: update secrets 2023-03-24 19:04:21 +01:00
29985fffc2 feat: replace urlwatch by panoptikon 2023-03-24 19:02:27 +01:00
85036b55a5 feat(i3): fix slock 2023-03-24 17:04:34 +01:00
15c7e5a35a feat: panoptikon urlwatcher 2023-03-24 17:00:51 +01:00
c829a3ecac chore: update 2023-03-24 00:12:31 +01:00
ee2b929838 feat: slock 2023-03-24 00:12:23 +01:00
36f5bc6dc0 fix(flix): flixmenu 2023-03-22 18:47:50 +01:00
54793196bc feat(radio): curl via tor 2023-03-22 07:48:13 +01:00
bbe6a9efec feat: update kmein ssh keys 2023-03-22 07:47:43 +01:00
eb5cedabf8 fix(picom): do not make lockscreen transparent 2023-03-21 19:14:32 +01:00
a294bf009d feat: use slock instead of k-lock 2023-03-21 19:13:48 +01:00
eb45fe28f6 fix(i3status-rust): no alternating tint; cool colours 2023-03-20 16:00:09 +01:00
5e8b1f37c6 feat(radio): move to ful to evade block, remove tor 2023-03-20 13:14:02 +01:00
7e86718b0f feat(radio): torify lyrikline 2023-03-20 12:25:43 +01:00
97ae9ec0bf feat(klem): add emojai script 2023-03-20 12:24:06 +01:00
a342aa687c feat(ssh): add kabsa key to agent 2023-03-20 12:23:49 +01:00
0a92d58d00 feat(klem): notify on success 2023-03-20 12:23:36 +01:00
0955b68054 feat(weechat): fix matrix server in sidebar 2023-03-20 12:23:25 +01:00
87ab995b82 feat(ssh): use gpg agent for agent 2023-03-12 18:26:58 +01:00
743a0f3239 chore: update secrets 2023-03-12 18:26:45 +01:00
fdaa98886e feat(manakish): add autorandr for dock switch 2023-03-12 18:26:07 +01:00
e07b053f6e fix(weechat): do not set passwords 2023-03-12 18:24:56 +01:00
ef08f4decd fix(streams): talk -> text 2023-03-11 08:27:20 +01:00
e6fb052ab8 chore: update 2023-03-11 06:36:29 +01:00
11f1be099e feat: gpg ssh key 2023-03-11 06:36:22 +01:00
dc267fc464 feat(manakish): sound via dock 2023-03-11 06:35:52 +01:00
24b552b966 feat(streams): add al jazeera 2023-03-10 20:33:11 +01:00
bc27b8bc64 fix(i3): correctly call dmenu-randr 2023-03-08 17:40:04 +01:00
58ceef04d6 feat(notmuch, mbsync): add fully qualified paths to dependent programs 2023-03-07 13:04:07 +01:00
bf62f74bc1 fix(notmuch): set name and email so it stops complaining 2023-03-06 22:30:09 +01:00
cbeffcdadd feat: install language servers 2023-03-06 22:07:57 +01:00
8f4019443d feat(neovim): hello lsp 2023-03-06 22:01:58 +01:00
eba8788547 fix(email): backup correctly
if mbsync is enabled for a homemanager account, aerc wants to use the
  maildir, which is stupid
2023-03-06 22:01:34 +01:00
3ebf717112 feat: backup email 2023-03-06 14:50:30 +01:00
4e6c8e13af feat(zsh): show hostname if in ssh 2023-03-06 11:44:38 +01:00
18ec46c773 feat(flix): update 2023-03-06 11:44:24 +01:00
9d61f006a6 feat: get krebs stuff from stockholm flake 2023-02-28 21:32:55 +01:00
d2fc37a70f fix(ttspaste): use espeak 2023-02-28 20:23:53 +01:00
e55a99f53d fix(retiolum): secret permissions 2023-02-28 17:13:12 +01:00
9d096ab4c4 fix(vdirsyncer): get password correctly 2023-02-28 17:13:12 +01:00
ed02741ee0 fix(hledger): install 2023-02-25 13:23:44 +01:00
cbd2b8edc2 fix: ci 2023-02-25 11:49:37 +01:00
bfd00e9a3b feat: bye krops 2023-02-25 09:19:11 +01:00
ad15c08c05 chore: update 2023-02-25 09:18:12 +01:00
749e783056 fix: do not build packages for mac 2023-02-25 08:57:50 +01:00
cc37e7ab00 chore: update secrets 2023-02-25 08:33:41 +01:00
0ba9124baa fix(moodle-dl): create config correctly 2023-02-25 08:32:38 +01:00
b3c996c154 feat(picom): make faster 2023-02-25 08:32:13 +01:00
b1743f031c feat: move ./modules to flake outputs 2023-02-24 23:49:00 +01:00
c9af430f31 feat: fix secrets permissions, move ./packages to flake outputs 2023-02-24 23:10:56 +01:00
c51db2b53c feat: convert inputs to flakes 2023-02-23 16:53:53 +01:00
b98ac4ebce chore: remove old ci.nix 2023-02-23 15:14:23 +01:00
d03c6bb0de feat: convert to flake
feat(zaatar): convert to flake

feat(tahina, tabula): convert to flake

feat(makanek): convert to flake

feat(manakish, zaatar): convert to flake

feat(ci): build flake systems

fix: ci build

feat: secrets via submodule

foo

foo

foo
2023-02-23 15:12:53 +01:00
ba27e98297 fix(email): show new stuff in info bar and remove gmail accounts 2023-02-22 09:37:30 +01:00
08cd4b0202 fix(aerc): hu accounts, khard, signatures 2023-02-21 22:29:41 +01:00
708e2ab1f4 feat: neomutt -> aerc 2023-02-21 12:07:06 +01:00
2e482d3fec feat(urlwatch): tatort 2023-02-19 15:05:16 +01:00
4fae6d1ed0 fix(mpv): support only pulse 2023-02-19 11:52:00 +01:00
9a80eb84d4 chore: update 2023-02-16 14:43:08 +01:00
f7cb9b8957 feat(weechat): join #hsmr-moin 2023-02-16 14:39:03 +01:00
e7c050c1c4 feat(moinbot): move to #hsmr-moin 2023-02-16 14:32:42 +01:00
c6ab8b4eb7 feat(ssh): add one more fysiweb host 2023-02-16 12:10:52 +01:00
7d0a802d30 feat(zaatar): allow ful to backup 2023-02-16 08:52:54 +01:00
eec6cf1bf9 feat(zaatar): tuna -> mpd, disable tuna 2023-02-16 08:52:44 +01:00
0698624eb8 feat(ful): add matomo and backup 2023-02-16 08:46:23 +01:00
d0eb69229d feat(picom): make animations faster, rename module 2023-02-13 23:19:44 +01:00
0f88954989 fix(ci): add grafana secret to makanek 2023-02-09 09:48:36 +01:00
7c349f1383 feat(grafana): provision 2023-02-08 09:26:36 +01:00
0eadbf08df feat: nemo with correct terminal setting 2023-02-07 22:30:42 +01:00
72100329b1 feat(compton): fade + inactiveOpacity 2023-02-07 22:30:16 +01:00
bf7b490372 feat: udiskie 2023-02-07 22:26:59 +01:00
dd4083aec5 fix(fonts): update hash, reject woff 2023-02-06 21:39:38 +01:00
6edd1c0439 feat: reenable flameshot-once 2023-02-06 21:23:33 +01:00
467c80a239 feat(streams): add more todo 2023-02-05 11:43:10 +01:00
b100ea7b28 chore: update and comment flameshot-once 2023-02-03 13:36:40 +01:00
3cdc468e31 feat(streams): add more todo 2023-02-03 11:05:26 +01:00
2d19ba7249 feat: build laptops from stable 2023-01-31 11:03:37 +01:00
7af32a0ad3 fix(ci): tt-rss -> miniflux 2023-01-31 10:24:25 +01:00
0e75118416 feat(streams): remove unicode from playlist names 2023-01-30 10:03:07 +01:00
139fcae7a0 Merge branch 'update_flake_lock_action' 2023-01-29 19:21:00 +01:00
bcfd5d73be feat: calendar add more planets 2023-01-29 19:20:51 +01:00
bcf057e871 fix(miniflux): rename password on server 2023-01-29 19:04:01 +01:00
fad2d0629d feat(mastodon-bot): disable 2023-01-29 18:51:05 +01:00
27cc5766ee fix(miniflux): rename password 2023-01-29 18:43:03 +01:00
813072e47c fix(miniflux): rename password 2023-01-29 17:51:32 +01:00
github-actions[bot]
bcc355f822 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/9e565f0d9d41c19a94f55af205c328ec5177fc0a' (2023-01-07)
  → 'github:nix-community/home-manager/08a778d80308353f4f65c9dcd3790b5da02d6306' (2023-01-28)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/2dea8991d89b9f1e78d874945f78ca15f6954289' (2023-01-06)
  → 'github:NixOS/nixpkgs/ce20e9ebe1903ea2ba1ab006ec63093020c761cb' (2023-01-28)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/a518c77148585023ff56022f09c4b2c418a51ef5' (2023-01-05)
  → 'github:NixOS/nixpkgs/9b97ad7b4330aacda9b2343396eb3df8a853b4fc' (2023-01-25)
• Updated input 'retiolum':
    'git+https://git.thalheim.io/Mic92/retiolum?ref=refs%2fheads%2fmaster&rev=33ac7efb37d36e1939b62a93494570bce1be4dac' (2023-01-07)
  → 'git+https://git.thalheim.io/Mic92/retiolum?ref=refs%2fheads%2fmaster&rev=a396ad8139cb934e36f0bf0bde84786b2704c6bd' (2023-01-26)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=895440aab0d360bd805338fa41874282a3209df0' (2023-01-07)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=e01e296e5d34aa74a4d6edf8203b3dd015a94112' (2023-01-28)
2023-01-29 17:51:13 +01:00
d8b931af7c feat: miniflux 2023-01-29 17:46:31 +01:00
4c8d2a051d feat(backup): also backup notes 2023-01-17 15:50:12 +01:00
2906848f92 feat(backup): also backup sd card directories 2023-01-17 15:37:56 +01:00
c2a78a88bd feat: git-crypt 2023-01-12 10:20:07 +01:00
63bf7ddeb0 feat(firefox): declarative 2023-01-12 10:19:56 +01:00
github-actions[bot]
19e4e76e6f flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/dd99675ee81fef051809bc87d67eb07f5ba022e8' (2022-12-29)
  → 'github:nix-community/home-manager/9e565f0d9d41c19a94f55af205c328ec5177fc0a' (2023-01-07)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/913a47cd064cc06440ea84e5e0452039a85781f0' (2022-12-29)
  → 'github:NixOS/nixpkgs/2dea8991d89b9f1e78d874945f78ca15f6954289' (2023-01-06)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/677ed08a50931e38382dbef01cba08a8f7eac8f6' (2022-12-29)
  → 'github:NixOS/nixpkgs/a518c77148585023ff56022f09c4b2c418a51ef5' (2023-01-05)
• Updated input 'scripts':
    'github:kmein/scripts/84ad80348294e9423996b52a4b112700ae5d3176' (2022-11-23)
  → 'github:kmein/scripts/2670c7eed566f195f833a25e6ccc6b368fe18af5' (2023-01-07)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=de0226995d553e4a70170ce59483a6d71f41932d' (2022-12-30)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=895440aab0d360bd805338fa41874282a3209df0' (2023-01-07)
2023-01-09 10:29:24 +01:00
79e9ab38a8 fix: use retiolum keys from password store 2023-01-08 00:16:30 +01:00
318687f5cf fix(radio): radio-news.r has moved so we have to update the retiolum hosts 2023-01-08 00:06:16 +01:00
c5a297cd7d feat: rusty alarm 2023-01-07 09:58:35 +01:00
6f6100d752 feat: return to pulseaudio 2023-01-07 08:30:57 +01:00
049dadd704 fix(nix): do not use flaky prism.r cache 2023-01-06 17:02:02 +01:00
0a4fa2d16f feat: pipewire 2023-01-06 15:32:23 +01:00
f25c59178c manakish: new sd card 2023-01-06 12:28:12 +01:00
88b6802dae fix(ci): add missing secret 2023-01-06 12:27:47 +01:00
5f88e7287b fix: pandoc man hash 2023-01-06 09:47:12 +01:00
abb0be6a17 feat: bye brave, hello firefox 2023-01-06 09:08:42 +01:00
fec8479e90 fix(tahina): install git for krops to work 2023-01-04 20:43:48 +01:00
190a46abcd feat(nixify): use packages instead of buildInputs 2023-01-04 20:43:38 +01:00
0a4fccd582 feat(mail): add klassphil email 2023-01-04 20:43:26 +01:00
232b6059df fix(mastodon-bot): restart on failure 2023-01-02 09:10:49 +01:00
eb17c7fdd9 fix: post on mastodon from both laptops 2023-01-01 14:53:47 +01:00
1aa7b78b4a fix: use my keys for @Mic92 retiolum module 2022-12-31 18:54:46 +01:00
de6408f28f feat: use @Mic92 retiolum module
the old one did this:

building '/nix/store/gqvr8gl8ayj9kgjnfr23ax0xpc3rnc34-unit-tinc.retiolum.service.drv'...
error: executing '/nix/store/4xw8n979xpivdc46a9ndcvyhwgif00hz-bash-5.1-p16/bin/bash': Argument list too long
error: builder for '/nix/store/gqvr8gl8ayj9kgjnfr23ax0xpc3rnc34-unit-tinc.retiolum.service.drv' failed with exit code 1
error: 1 dependencies of derivation '/nix/store/v2ld4847xyb49v7wjb3fvf6lkg2j755b-system-units.drv' failed to build
error: 1 dependencies of derivation '/nix/store/bbl9qidw9z0gz56z7yrhfkxsawk5qi7x-etc.drv' failed to build
2022-12-31 10:40:41 +01:00
aeed540089 feat: no proprietary pdf readers please, also no goldendict
they both want me to build qtwebkit
2022-12-31 08:10:08 +01:00
d769b79ac3 feat: add mastodon poster 2022-12-31 07:23:34 +01:00
126dfada4b feat(atuin): restart on failure 2022-12-31 07:23:01 +01:00
github-actions[bot]
2793d2ca0e flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/eb3598cf44aa10f2a16fe38488a102c0f474d766' (2022-12-03)
  → 'github:nix-community/home-manager/d7eee202e597bc7789498a8664082cf0ffedaa8f' (2022-12-23)
• Updated input 'nix-writers':
    'git+https://cgit.krebsco.de/nix-writers?ref=refs%2fheads%2fmaster&rev=f65c77bdcc58be2081a0ffbda849289c5191b5e8' (2022-11-29)
  → 'git+https://cgit.krebsco.de/nix-writers?ref=refs%2fheads%2fmaster&rev=0c8de150426476b5287cf2787bbd85263691a802' (2022-12-12)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/660e7737851506374da39c0fa550c202c824a17c' (2022-12-02)
  → 'github:NixOS/nixpkgs/9898811c658d39b2692d0ab744377e02fd85d08b' (2022-12-22)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/b72b8b94cf0c012b0252a9100a636cad69696666' (2022-12-02)
  → 'github:NixOS/nixpkgs/652e92b8064949a11bc193b90b74cb727f2a1405' (2022-12-22)
• Updated input 'retiolum':
    'github:krebs/retiolum/cada994815864d4cc1edb9d76df74beafc496481' (2022-12-01)
  → 'github:krebs/retiolum/20ad3544d80690791bed8a639d08848924a7aaa9' (2022-12-19)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=3884243448869bdf09f6434b385e532c7c26ae88' (2022-12-12)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=6e13334579f16940edb1182662d9ac58e57aba0e' (2022-12-25)
2022-12-29 23:43:06 +01:00
b536f2af34 feat(hu-vpn): remove openvpn, do not split tunnel 2022-12-29 23:37:29 +01:00
41d2a32585 feat: rink, deno 2022-12-29 23:37:13 +01:00
94f2c18432 feat(autocutsel): disable because i dont want to paste everything i select 2022-12-18 13:51:22 +01:00
a2e98794cb feat(alacritty): visual bell 2022-12-17 10:03:15 +01:00
547d59ee2c feat: reenable ssh agent, gpg did not work 2022-12-17 10:03:00 +01:00
bc8a035451 feat(gpg): use for ssh, increase ttl 2022-12-13 14:38:14 +01:00
36ce5143b4 fix(radio-news): only give one hour of stockholm history 2022-12-13 14:26:37 +01:00
e4514389f1 feat(color): use papercolor 2022-12-13 14:12:40 +01:00
99bc72eb29 feat(tarot): use scriptFile option 2022-12-13 09:36:59 +01:00
7aee4b566c feat(manakish): welcome docking station 2022-12-07 21:05:21 +01:00
42cff2dc92 chore: poetry is broken 2022-12-05 10:35:07 +01:00
2576637960 Merge branch 'update_flake_lock_action' 2022-12-05 10:20:43 +01:00
github-actions[bot]
d83f43a141 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/478610aa37c8339eacabfa03f07dacf5574edd47' (2022-11-30)
  → 'github:nix-community/home-manager/eb3598cf44aa10f2a16fe38488a102c0f474d766' (2022-12-03)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/596a8e828c5dfa504f91918d0fa4152db3ab5502' (2022-11-30)
  → 'github:NixOS/nixpkgs/660e7737851506374da39c0fa550c202c824a17c' (2022-12-02)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/a115bb9bd56831941be3776c8a94005867f316a7' (2022-11-27)
  → 'github:NixOS/nixpkgs/b72b8b94cf0c012b0252a9100a636cad69696666' (2022-12-02)
• Updated input 'retiolum':
    'github:krebs/retiolum/4679cdd5f0851f22518e7011144f22431e6551c0' (2022-12-01)
  → 'github:krebs/retiolum/cada994815864d4cc1edb9d76df74beafc496481' (2022-12-01)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=81b5682c5ff1e36613f844a874e09b897ee13d3e' (2022-11-29)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=645c3564f75589531abcf17fd3c3f920d93a394a' (2022-12-02)
2022-12-05 10:07:08 +01:00
218195a781 fix(notemenu) 2022-12-05 10:06:40 +01:00
bb8940c9e5 feat(nix): auto gc for saving space 2022-12-03 11:34:40 +01:00
e6623e8b4d feat(zaatar): backup sql backups 2022-12-03 08:51:11 +01:00
b5514150ab Revert "feat(alertmanager): send text email as well"
This reverts commit 3b1af791c9.
2022-12-03 08:45:40 +01:00
2b2514b2eb feat(nextcloud): i do not use server side encryption 2022-12-03 08:36:29 +01:00
3b1af791c9 feat(alertmanager): send text email as well 2022-12-03 08:31:45 +01:00
f3e14ffc9e feat(alertmanager): send telegram and email notifications 2022-12-03 08:31:45 +01:00
f04ca9d1de feat(postgresql): enable backup 2022-12-03 08:31:45 +01:00
72b48e90aa fix(notemenu): open notes correctly 2022-12-03 07:15:03 +01:00
bd065e7888 feat(alertmanager): send telegram and email with more info 2022-12-02 17:32:40 +01:00
45644518bb feat(urlwatch): remove arnshaugk due to spam 2022-12-01 20:52:37 +01:00
77ddd1d02f feat(urlwatch): remove tatort due to spam 2022-12-01 20:52:15 +01:00
0f5e0e8d6f chore: update retiolum 2022-12-01 20:00:05 +01:00
de066361b7 feat(prometheus): make reachable via http 2022-12-01 19:58:59 +01:00
ba3a139f8e feat(tt-rss): disable registration 2022-12-01 18:25:43 +01:00
91fa6faeaf feat(nextcloud): set email via module 2022-12-01 18:25:33 +01:00
e95546ef8a feat(nextcloud): upgrade 2022-12-01 18:25:16 +01:00
b9623e3d57 feat(alertmanager): access via http 2022-12-01 18:25:03 +01:00
73929c1963 feat(newsboat): star flag s 2022-12-01 18:24:19 +01:00
3197a5a232 feat(prometheus): use node exporter firewall option 2022-12-01 18:24:05 +01:00
6a605633ae chore: update retiolum 2022-12-01 17:07:44 +01:00
52376128a5 feat(alertmanager): report via email like a professional, allow http access 2022-12-01 17:07:06 +01:00
4a5bc2d89d feat: update to 22.11 2022-12-01 17:07:06 +01:00
3ec22d6ef0 feat(journald): save space on journal 2022-12-01 17:04:12 +01:00
3c86532a5d feat(nextcloud): try to log stuff 2022-12-01 13:37:46 +01:00
a34b4a8262 feat: use owickstrom colours 2022-11-30 12:39:45 +01:00
3102d6f56c fix(alacritty): use correct config path 2022-11-30 11:44:39 +01:00
a2b65034bf fix(nextcloud): do not sync paychecks anymore 2022-11-30 11:23:07 +01:00
90550dc18b feat: atuin 2022-11-30 11:21:38 +01:00
03d40a488b chore: permit insecure qtwebkit 2022-11-30 09:19:30 +01:00
74191a27ee Merge remote-tracking branch 'origin/update_flake_lock_action' 2022-11-30 07:42:47 +01:00
a33db562c4 feat(alacritty): make faster 2022-11-29 22:51:09 +01:00
93cc209e52 feat: clipmenu 2022-11-29 22:50:49 +01:00
d1b5b0c25c feat(newsboat): starred tt-rss 2022-11-29 13:58:42 +01:00
ff5bc035c0 feat(tt-rss): correct name, add secret to ci 2022-11-29 13:55:56 +01:00
e06e7bbe0d feat(i3): more github stuff is important 2022-11-29 12:00:35 +01:00
8786bfad24 feat(moodle-dl): borsfaye 2022-11-28 12:54:30 +01:00
github-actions[bot]
10949f7746 flake.lock: Update
Flake lock file updates:

• Updated input 'flake-utils':
    'github:numtide/flake-utils/6ee9ebb6b1ee695d2cacc4faa053a7b9baa76817' (2022-10-29)
  → 'github:numtide/flake-utils/5aed5285a952e0b949eb3ba02c12fa4fcfef535f' (2022-11-02)
• Updated input 'home-manager':
    'github:nix-community/home-manager/722e8d65d3aba6f527100cc2d1539e4ca04d066f' (2022-10-31)
  → 'github:nix-community/home-manager/e999dfe7cba2e1fd59ab135e7496545bd4f82b76' (2022-11-27)
• Updated input 'home-manager/utils':
    'github:numtide/flake-utils/6ee9ebb6b1ee695d2cacc4faa053a7b9baa76817' (2022-10-29)
  → 'github:numtide/flake-utils/5aed5285a952e0b949eb3ba02c12fa4fcfef535f' (2022-11-02)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/26eb67abc9a7370a51fcb86ece18eaf19ae9207f' (2022-10-30)
  → 'github:NixOS/nixpkgs/695b3515251873e0a7e2021add4bba643c56cde3' (2022-11-25)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/412b9917cea092f3d39f9cd5dead4effd5bc4053' (2022-10-30)
  → 'github:NixOS/nixpkgs/5dc7114b7b256d217fe7752f1614be2514e61bb8' (2022-11-25)
• Updated input 'scripts':
    'github:kmein/scripts/66b2068d548d3418c81dd093bba3f80248c68196' (2022-10-12)
  → 'github:kmein/scripts/84ad80348294e9423996b52a4b112700ae5d3176' (2022-11-23)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=a83dec755ca2753705254f90346e4441d2f25c7c' (2022-10-31)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=dae12b6893a1d28e8bcb1fe3fb9ee8757bbfbed4' (2022-11-24)
2022-11-27 00:55:59 +00:00
12e3529df8 fix(celan): send at random time 2022-11-26 11:35:58 +01:00
4b954a7e83 fix(tabula): networking, sound 2022-11-25 11:27:43 +01:00
ce99920054 feat: celan telegram bot 2022-11-25 11:27:16 +01:00
c3c0792d50 feat: init tabula 2022-11-25 09:16:02 +01:00
851a9edc4d chore: update retiolum 2022-11-25 09:15:42 +01:00
e69668606e feat(streams): rename радио русский берлин 2022-11-22 19:31:21 +01:00
52d73abe06 feat: fq 2022-11-22 11:48:15 +01:00
bf899d0bde feat(i3): envs.sh 2022-11-22 11:48:09 +01:00
dcf2fa523b feat(tt-rss): replace freshrss 2022-11-16 11:21:22 +01:00
cae4423fb3 feat(freshrss): run from unstable, use with newsboat 2022-11-16 10:03:55 +01:00
25b37c2b01 feat(freshrss): host on makanek 2022-11-14 23:07:19 +01:00
a4e0e25465 feat: add termdown 2022-11-09 11:07:58 +01:00
4fa3a3e5fc feat(xkb): add hebrew 2022-11-09 11:07:44 +01:00
4950442f8b feat(i3): highlight borders blue 2022-11-08 20:31:16 +01:00
7252826719 feat(i3): no gaps 2022-11-08 20:31:04 +01:00
a22acd2073 feat(i3): no no startup id 2022-11-08 20:30:53 +01:00
9e85a12084 fix(i3): remove title bars 2022-11-08 20:30:28 +01:00
600d8a5f7d fix: temporarily disable trådfri 2022-11-08 06:41:27 +01:00
857518578a feat(fzf): do not ignore vcs and follow links 2022-11-07 15:44:18 +01:00
b1fcbcaa96 feat(xkb): add coptic, avestan, devanagari 2022-11-07 15:42:40 +01:00
005e193f56 fix(menstruation): update 2022-11-07 11:29:10 +01:00
6e5ff9214e chore: update 2022-11-01 09:45:06 +01:00
85f3722ba5 feat(nextcloud): sync fysi documents 2022-11-01 07:55:06 +01:00
797d091643 fix(tlg-wotd) 2022-10-28 07:45:40 +02:00
b1544906aa feat(moodle-dl): WS22 course 2022-10-25 07:39:19 +02:00
c886511c99 feat: json2csv script 2022-10-19 08:56:47 +02:00
7388395908 feat(graph.r): update to show pois on map 2022-10-19 08:56:39 +02:00
bf42e37daa Merge pull request #27 from kmein/update_flake_lock_action
flake.lock: Update
2022-10-18 20:42:11 +02:00
035fa9e29d chore: update scripts 2022-10-18 10:11:18 +02:00
cc28b894d1 fix(menstruation): update 2022-10-18 10:10:57 +02:00
c1c1665e50 feat(moinbot): randomize greeting 2022-10-18 10:10:57 +02:00
2dca2596cd feat(onomap): allow multiple names 2022-10-18 10:10:56 +02:00
github-actions[bot]
bede997e7d flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/a7f0cc2d7b271b4a5df9b9e351d556c172f7e903' (2022-09-30)
  → 'github:nix-community/home-manager/2ecb3ea990cf737cfb42d8cd805fa86347c1afaf' (2022-10-15)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/9cac45850280978a21a3eb67b15a18f34cbffa2d' (2022-10-01)
  → 'github:NixOS/nixpkgs/e06bd4b64bbfda91d74f13cb5eca89485d47528f' (2022-10-12)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/ae1dc133ea5f1538d035af41e5ddbc2ebcb67b90' (2022-09-22)
  → 'github:NixOS/nixpkgs/4428e23312933a196724da2df7ab78eb5e67a88e' (2022-10-14)
• Updated input 'retiolum':
    'github:krebs/retiolum/86208b5a747d7aa661240b2d5c2f229f2ed76959' (2022-09-28)
  → 'github:krebs/retiolum/289712a3becfec77dab8963d450b2afe616569e0' (2022-10-12)
• Updated input 'scripts':
    'github:kmein/scripts/86c71080945e5b637d9dde5c3d944d600035e2eb' (2022-10-09)
  → 'github:kmein/scripts/66b2068d548d3418c81dd093bba3f80248c68196' (2022-10-12)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=8f929b04b3de012a9c72306786f076b78aa9f98c' (2022-09-27)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=0d32cceb996dc3b91342ce9d0aa2df1b234522fa' (2022-10-12)
2022-10-16 01:15:33 +00:00
0082602131 feat(smyth): only once per day 2022-10-14 15:20:19 +02:00
8ffeddb46b chore(onomap): remove unused variable 2022-10-09 07:14:36 +02:00
c06e37f40a feat(onomap): allow multiple names 2022-10-07 02:23:54 +02:00
8d36a77405 fix: downgrade unstable because i dont want to damage my display
https://lore.kernel.org/all/YzwooNdMECzuI5+h@intel.com/
2022-10-06 11:07:20 +02:00
1219517d62 fix(vimPlugins): name -> pname 2022-10-06 11:07:20 +02:00
786d1df781 fix: pkgconfig -> pkg-config 2022-10-06 10:53:11 +02:00
c49859900a fix: utillinux -> util-linux 2022-10-06 10:37:21 +02:00
f9ce538975 fix: posix_man_pages -> man-pages-posix 2022-10-06 10:32:31 +02:00
7d6e7ae1a2 fix: xdg_utils -> xdg-utils 2022-10-06 10:32:30 +02:00
176958cd75 fix: iproute -> iproute2 2022-10-06 10:31:26 +02:00
816c21d7de fix: gnome3 -> gnome 2022-10-06 09:41:25 +02:00
3b1f4799e0 fix(hesychius): update scripts 2022-10-06 08:17:14 +02:00
c52df45b4f fix(ful): disable systemd-networkd-wait-online 2022-10-06 07:17:48 +02:00
84f83cb6ac Merge pull request #26 from kmein/update_flake_lock_action
flake.lock: Update
2022-10-05 22:49:37 +02:00
652b7d4852 fix(rofi-pass): generate passwords, correct default user 2022-10-05 17:09:34 +02:00
e73c139d69 feat(rofi-pass): allow insertion 2022-10-05 17:08:58 +02:00
549282140f fix(rofi-pass): include via home-manager
also fix https://github.com/carnager/rofi-pass/issues/226
2022-10-05 16:50:27 +02:00
f3bb52e820 feat: we may want to eat fast food on tuesdays 2022-10-04 10:59:17 +02:00
717672e86e feat: calendars script 2022-10-03 19:14:21 +02:00
1cee1c06f7 feat(moodle-dl): WS22 course 2022-10-03 19:14:11 +02:00
4d5989aa5b feat(neomutt): alias for faster access of single accounts 2022-10-03 19:13:57 +02:00
01bdeb05b7 kabsa: new SD card 2022-10-02 09:59:10 +02:00
5c422e74e8 feat: new DR streams, playlist for Record 2022-10-02 09:58:59 +02:00
github-actions[bot]
be3795e957 flake.lock: Update
Flake lock file updates:

• Updated input 'home-manager':
    'github:nix-community/home-manager/de3758e31a3a1bc79d569f5deb5dac39791bf9b6' (2022-09-23)
  → 'github:nix-community/home-manager/a7f0cc2d7b271b4a5df9b9e351d556c172f7e903' (2022-09-30)
• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/7e27b838cd7ac90fed03d0d5a8487848c4b0b6d2' (2022-09-23)
  → 'github:NixOS/nixpkgs/9cac45850280978a21a3eb67b15a18f34cbffa2d' (2022-10-01)
• Updated input 'nixos-unstable':
    'github:NixOS/nixpkgs/ae1dc133ea5f1538d035af41e5ddbc2ebcb67b90' (2022-09-22)
  → 'github:NixOS/nixpkgs/10ecda252ce1b3b1d6403caeadbcc8f30d5ab796' (2022-09-30)
• Updated input 'recht':
    'github:kmein/recht/d551afed23122bb3106e59eb2274394ec5555048' (2021-04-28)
  → 'github:kmein/recht/dc2cb407052a53965e6678fd84f0d887f887c11c' (2022-09-28)
• Updated input 'retiolum':
    'github:krebs/retiolum/8d9b86a0ce503588bb34ae8676fdbcb0e4014119' (2022-09-24)
  → 'github:krebs/retiolum/86208b5a747d7aa661240b2d5c2f229f2ed76959' (2022-09-28)
• Updated input 'stockholm':
    'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=55957c6d6adb51d2079c117c1e7309c60ee0fe0f' (2022-09-19)
  → 'git+https://cgit.lassul.us/stockholm?ref=refs%2fheads%2fmaster&rev=8f929b04b3de012a9c72306786f076b78aa9f98c' (2022-09-27)
2022-10-02 01:16:36 +00:00
6063f4c90b feat(ssh): use fysiweb identity for ip login on dev1 2022-09-28 15:54:42 +02:00
7c4557331f feat(newsboat): hooktube is no more 2022-09-28 15:54:21 +02:00
8a7e4386fb fix(newsboat): call link handler 2022-09-28 14:15:39 +02:00
61ab528d56 feat: screencap script 2022-09-28 09:34:17 +02:00
032810109c fix(ci): add mega password 2022-09-27 22:28:58 +02:00
6b0bb6a806 feat(cloud): add script for browsing mega 2022-09-27 22:07:03 +02:00
7ce64d461c fix(notemenu): do not show hidden files 2022-09-27 20:40:24 +02:00
51afd41254 fix(notement): correctly handle files with spaces 2022-09-27 19:36:22 +02:00
eb4fa1b9bd feat(nextcloud): disable gui client 2022-09-27 19:19:14 +02:00
ac7a4b2aa5 feat(nextcloud): sync nextcloud notes periodically 2022-09-27 19:18:42 +02:00
89a4b13b2d feat: bye ncdu, hi gdu 2022-09-27 19:17:30 +02:00
f5da2dffd8 feat(newsboat): add odysee to linkhandler 2022-09-27 09:47:50 +02:00
cdf42df7c1 feat(bin): add tuesday script 2022-09-26 09:40:12 +02:00
3ccf0cfe9a feat(bin): add prospekte script 2022-09-26 09:39:59 +02:00
83632cbd9c feat(ful): monitoring 2022-09-26 09:30:28 +02:00
github-actions[bot]
092879a425 flake.lock: Update
Flake lock file updates:

• Updated input 'nixos-stable':
    'github:NixOS/nixpkgs/bcc68429a50c4ac051920c72c60e417202c19d79' (2022-09-22)
  → 'github:NixOS/nixpkgs/7e27b838cd7ac90fed03d0d5a8487848c4b0b6d2' (2022-09-23)
• Updated input 'retiolum':
    'github:krebs/retiolum/c4d6b07be29b3b9267027ed25792a2cb350459d5' (2022-08-16)
  → 'github:krebs/retiolum/8d9b86a0ce503588bb34ae8676fdbcb0e4014119' (2022-09-24)
2022-09-25 01:04:02 +00:00
c6a45b421b feat: update 2022-09-23 23:31:27 +02:00
b5addef848 fix: dont get scripts from overlay 2022-09-23 23:31:14 +02:00
e2cf761aea feat: more transits 2022-09-23 09:54:58 +02:00
868dc8a4aa feat(moodle-dl): disable for borsfaye 2022-09-23 09:32:29 +02:00
dfd4bb0ca8 chore: get also otf from fonts 2022-09-23 09:32:29 +02:00
3e03688c81 feat: reenable transits 2022-09-23 09:32:21 +02:00
3136002449 feat: wrap jsesh 2022-09-19 22:04:52 +02:00
4cbd2fee7d WIP(fonts): install egyptological fonts 2022-09-19 22:04:37 +02:00
565c73bd05 feat(fonts): add emojifont to terminal 2022-09-19 07:29:47 +02:00
e5f933977c feat(unicodmenu): update to unicode 15 2022-09-19 07:29:12 +02:00
736b289643 feat(rofi): light theme 2022-09-19 07:28:57 +02:00
e0e0dd9e34 feat(fonts): cardo 2022-09-16 09:27:47 +02:00
1e2613b838 feat(newsboat): reload in parallel 2022-09-15 12:22:38 +02:00
f41ddb654a we dont need no procrastination 2022-09-13 21:01:32 +02:00
41ecca8411 feat(weechat): authenticate @ news.r 2022-09-13 21:01:16 +02:00
a80f4d866a chore: update 2022-09-13 20:30:07 +02:00
f56e9aa37b feat(todo): add procrastination 2022-09-12 12:36:14 +02:00
822b0df4b8 feat(i3): dock i3bar 2022-09-10 21:51:16 +02:00
c16123dc8d feat: automate entering ssh passphrase 2022-09-08 12:46:44 +02:00
292 changed files with 7704 additions and 5611 deletions

19
.bin/calendars.sh Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/sh
directory="$(mktemp -d)"
trap clean EXIT
clean() {
rm -rf "$directory"
}
year=$(date +%Y)
output=/tmp/$year.pdf
for month in $(seq 1 12); do
printf "\r%d" "$month" 1>&2
astrolog -zN Berlin -qm "$month" "$year" -X -K -XA -Xr -Xm -Xb -Xo "$(printf "%s/%02d.bmp" "$directory" "$month")" -Xw 1080 720 2>/dev/null
done
printf "\r"
convert "$directory/*.bmp" "$output"
echo "$output"

43
.bin/dummy-alert Executable file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
name=$RANDOM
url='http://localhost:9093/api/v1/alerts'
echo "firing up alert $name"
# change url o
curl -XPOST $url -d "[{
\"status\": \"firing\",
\"labels\": {
\"alertname\": \"$name\",
\"service\": \"my-service\",
\"severity\":\"warning\",
\"instance\": \"$name.example.net\"
},
\"annotations\": {
\"summary\": \"High latency is high!\"
},
\"generatorURL\": \"http://prometheus.int.example.net/<generating_expression>\"
}]"
echo ""
echo "press enter to resolve alert"
read
echo "sending resolve"
curl -XPOST $url -d "[{
\"status\": \"resolved\",
\"labels\": {
\"alertname\": \"$name\",
\"service\": \"my-service\",
\"severity\":\"warning\",
\"instance\": \"$name.example.net\"
},
\"annotations\": {
\"summary\": \"High latency is high!\"
},
\"generatorURL\": \"http://prometheus.int.example.net/<generating_expression>\"
}]"
echo ""

5
.bin/json2csv.jq Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env -S jq -r -f
(map(keys) | add | unique) as $cols
| map(. as $row | $cols | map($row[.])) as $rows
| $cols, $rows[]
| @csv

65
.bin/prospekte.sh Executable file
View File

@@ -0,0 +1,65 @@
#!/bin/sh
lidl() {
echo LIDL
curl -sSL 'https://endpoints.lidl-flyer.com/v3/region-overview/lidl/de-DE/0.json' \
| jq -r '
.categories
| map(select(.name == "Filial-Angebote") | .subcategories | map(.flyers))
| flatten
| flatten
| .[]
| .pdfUrl
'
}
aldi_nord() {
echo ALDI nord
echo 'https://magazine.aldi-nord.de/aldi-nord/aldi-aktuell/GetPDF.ashx'
echo 'https://magazine.aldi-nord.de/aldi-nord/aldi-vorschau/GetPDF.ashx'
}
rewe_berlin() {(
store_id=662366923
publisher_id=1062
echo REWE
curl -sSL 'https://www.bonialserviceswidget.de/de/stores/'$store_id'/brochures?storeId='$store_id'&publisherId='$publisher_id | while read -r brochure_id; do
curl -sSL 'https://www.bonialserviceswidget.de/de/v5/brochureDetails/'"$brochure_id"'?publisherId='$publisher_id | jq -r .pdfUrl
done
)}
kaufland() {(
region_code=8920
echo KAUFLAND
curl -sSL https://filiale.kaufland.de/prospekte.html | htmlq --attribute href '.flyer a' | grep -Eo 'DE_de_KDZ[^/]*' | sed "s/_3000_/_${region_code}_/" | while read -r flyer_id; do
curl -sSL "https://endpoints.leaflets.kaufland.com/v3/$flyer_id/flyer.json?regionCode=$region_code" | jq -r .flyer.pdfUrl
done
)}
netto_schwarz() {
echo 'NETTO (schwarz)'
curl -sSL 'https://squid-api.tjek.com/v2/catalogs?dealer_ids=90f2VL&order_by=created' \
| jq -r '.[] | .id' \
| while read -r flyer_id; do
curl -sSL "https://squid-api.tjek.com/v2/catalogs/$flyer_id/download" \
| jq -r .pdf_url
done
}
dir="$(mktemp -d)"
trap clean EXIT
clean() {
rm -rf "$dir"
}
prospekt_url="$( (
lidl
aldi_nord
rewe_berlin
kaufland
netto_schwarz
) | fzf)"
curl -sSL "$prospekt_url" -o "$dir/prospekt.pdf"
zathura "$dir/prospekt.pdf"

16
.bin/screencap.sh Executable file
View File

@@ -0,0 +1,16 @@
#! /usr/bin/env nix-shell
#! nix-shell -i sh -p coreutils byzanz xorg.xwininfo gnused
# shellcheck shell=sh
# ref https://gist.github.com/aforemny/0994cb7f06ea30d56c8b9681ff5d2054
set -eux
eval "$(xwininfo | \
sed -n -e 's/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p' \
-e 's/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p' \
-e 's/^ \+Width: \+\([0-9]\+\).*/w=\1/p' \
-e 's/^ \+Height: \+\([0-9]\+\).*/h=\1/p')"
trap "pkill -f 'sleep 360d'" INT
byzanz-record -e "sleep 360d" -c -x $x -y $y -w $w -h $h "$@"

50
.bin/toposort.nix Normal file
View File

@@ -0,0 +1,50 @@
let
lib = import <nixpkgs/lib>;
in rec {
inherit lib;
input = [
{
x = ["pool" "zfs"];
y = ["mdadm" "raid1"];
}
{
x = ["pool" "zfs"];
y = ["disk" "sda"];
}
{
x = ["mdadm" "raid1"];
y = ["disk" "sdb"];
}
{
x = ["mdadm" "raid1"];
y = ["disk" "sdc"];
}
];
outNodes = node: graph:
lib.unique
(builtins.map (e: e.y)
(builtins.filter (v: v.x == node) graph));
vertices = graph:
lib.unique
(builtins.map (x: x.y) graph ++ builtins.map (x: x.x) graph);
deleteVertex = node: graph: (builtins.filter (v: v.x != node && v.y != node) graph);
findSink = graph:
lib.findFirst
(v: outNodes v graph == [])
(lib.trace graph (builtins.abort "No sink found"))
(vertices graph);
topSort = graph:
if graph == []
then []
else if builtins.length graph == 1
then let only = builtins.head graph; in [only.y only.x]
else let sink = findSink graph; in [sink] ++ topSort (deleteVertex sink graph);
output = topSort input;
}

18
.bin/ttrss-unread Executable file
View File

@@ -0,0 +1,18 @@
#/usr/bin/env -S deno run -A:q
set -x
session_cache="$HOME/.cache/tt-rss.session"
ttrss_endpoint=https://feed.kmein.de/api/
ttrss_user=k
ttrss_password=$(pass shared/tt-rss/password)
login() {
if [ -f "$session_cache" ]; then
session_id="$(cat "$session_cache")"
else
session_id="$(curl -d '{"op":"login","user":"'"$ttrss_user"'","password":"'"$ttrss_password"'"}' "$ttrss_endpoint" | jq -r .content.session_id)"
echo "$session_id" > "$session_cache"
fi
}
login
curl -d '{"sid":"'"$session_id"'","op":"getUnread"}' "$ttrss_endpoint" | jq .content

16
.bin/tuesday-1800 Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/sh
set -efux
expected_max_results=1024 # the upper bound on the number of restaurants
radius=250
echo '[out:json];node(id:260050809)->.cbase;
(
node(around.cbase:'$radius')[amenity=fast_food];
node(around.cbase:'$radius')[amenity=restaurant];
);out;' \
| curl -sSL -d @- -X POST http://overpass-api.de/api/interpreter \
| jq --argjson random "$(shuf -i 0-$expected_max_results -n 1)" '
.elements
| length as $length
| .[$random % $length]
'

8
.bin/unicode Normal file
View File

@@ -0,0 +1,8 @@
import sys
import unicodedata
for index, character in enumerate(sys.stdin.read().strip()):
try:
print(index, character, hex(ord(character)), unicodedata.category(character), unicodedata.name(character))
except:
print(index, character, hex(ord(character)))

View File

@@ -9,6 +9,29 @@ jobs:
matrix:
system: [makanek,manakish,kabsa,zaatar,ful]
steps:
- uses: actions/checkout@v2
- uses: cachix/install-nix-action@v16
- run: nix run .#build-${{matrix.system}}
- uses: actions/checkout@v3
- name: Install QEMU (ARM)
run: sudo apt-get install -y qemu-user-static
if: ${{ matrix.system == 'ful' }}
- name: Install Nix (ARM)
uses: cachix/install-nix-action@v16
if: ${{ matrix.system == 'ful' }}
with:
extra_nix_config: |
system = aarch64-linux
- name: Install Nix (x86_64)
uses: cachix/install-nix-action@v16
if: ${{ matrix.system != 'ful' }}
- name: nixos-rebuild dry-build
run: |
# remove secrets: ref https://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule/36593218
git submodule deinit -f secrets
rm -rf .git/modules/secrets
git rm -f secrets
# recreate secrets
mkdir secrets
cat secrets.txt | while read -r path; do touch $path; done
git add secrets
nix run nixpkgs#nixos-rebuild -- dry-build --flake $GITHUB_WORKSPACE#${{matrix.system}}

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "secrets"]
path = secrets
url = ssh://gitea@code.kmein.de:22022/kfm/niveum-secrets.git

94
ci.nix
View File

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

270
configs/aerc.nix Normal file
View File

@@ -0,0 +1,270 @@
{
pkgs,
config,
lib,
...
}: let
inherit (import ../lib/email.nix) defaults;
in {
age.secrets = {
email-password-cock = {
file = ../secrets/email-password-cock.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;
group = config.users.users.me.group;
mode = "400";
};
};
home-manager.users.me = {
services.mbsync = {
enable = true;
frequency = "daily";
preExec = "${pkgs.coreutils}/bin/mkdir -p ${config.home-manager.users.me.accounts.email.maildirBasePath}";
postExec = "${pkgs.notmuch}/bin/notmuch new";
};
programs.notmuch = {
enable = true;
extraConfig = {
database.path = config.home-manager.users.me.accounts.email.maildirBasePath;
new.tags = "";
user.name = defaults.realName;
user.primary_email = config.home-manager.users.me.accounts.email.accounts.posteo.address;
};
};
programs.mbsync = {
enable = true;
extraConfig = lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: ''
IMAPAccount ${name}
CertificateFile /etc/ssl/certs/ca-certificates.crt
Host ${account.imap.host}
PassCmd "${toString account.passwordCommand}"
User ${account.userName}
SSLType IMAPS
${lib.optionalString (lib.isInt account.imap.port) "Port ${toString account.imap.port}"}
IMAPStore ${name}-remote
Account ${name}
MaildirStore ${name}-local
Path ${config.home-manager.users.me.accounts.email.maildirBasePath}/${name}/
SubFolders Verbatim
Channel ${name}
Create Near
Expunge None
Far :${name}-remote:
Near :${name}-local:
Patterns *
Remove None
SyncState *
'')
config.home-manager.users.me.accounts.email.accounts);
};
accounts.email.accounts = {
cock =
lib.recursiveUpdate defaults
rec {
address = "2210@cock.li";
userName = address;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-cock.path}";
realName = "";
imap.host = "mail.cock.li";
smtp.host = imap.host;
};
posteo =
lib.recursiveUpdate defaults
rec {
address = "kieran.meinhardt@posteo.net";
aliases = ["kmein@posteo.de"];
userName = address;
imap.host = "posteo.de";
smtp.host = imap.host;
primary = true;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-posteo.path}";
# himalaya = { enable = true; backend = "imap"; sender = "smtp"; };
};
};
# programs.himalaya.enable = true;
programs.aerc = {
enable = true;
extraBinds = {
# Binds are of the form <key sequence> = <command to run>
# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
global = {
"<C-p>" = ":prev-tab<Enter>";
"<C-n>" = ":next-tab <Enter>";
"<C-t>" = ":term<Enter>";
"?" = ":help keys<Enter>";
};
messages = {
q = ":quit<Enter>";
j = ":next <Enter>";
"<Down>" = ":next<Enter>";
"<C-d>" = ":next 50%<Enter>";
"<C-f>" = ":next 100%<Enter>";
"<PgDn>" = ":next 100%<Enter>";
k = ":prev <Enter>";
"<Up>" = ":prev<Enter>";
"<C-u>" = ":prev 50%<Enter>";
"<C-b>" = ":prev 100%<Enter>";
"<PgUp>" = ":prev 100%<Enter>";
g = ":select 0 <Enter>";
G = ":select -1<Enter>";
J = ":next-folder <Enter>";
K = ":prev-folder<Enter>";
H = ":collapse-folder<Enter>";
L = ":expand-folder<Enter>";
"<space>" = ":read -t<Enter>:next<Enter>";
v = ":mark -t<Enter>";
V = ":mark -v<Enter>";
F = ":flag -t<Enter>";
T = ":toggle-threads<Enter>";
"<Enter>" = ":view<Enter>";
d = ":prompt 'Delete? ' 'delete-message'<Enter>";
D = ":move Trash<Enter>";
A = ":archive flat<Enter>";
C = ":compose<Enter>";
rr = ":reply -a<Enter>";
rq = ":reply -aq<Enter>";
Rr = ":reply<Enter>";
Rq = ":reply -q<Enter>";
c = ":cf<space>";
"$" = ":term<space>";
"!" = ":term<space>";
"|" = ":pipe<space>";
"/" = ":search<space>";
"\\" = ":filter <space>";
n = ":next-result<Enter>";
N = ":prev-result<Enter>";
"<Esc>" = ":clear<Enter>";
"*" = ":filter -x Flagged<Enter>";
};
view = {
"/" = ":toggle-key-passthrough <Enter> /";
q = ":close<Enter>";
O = ":open<Enter>";
S = ":save<space>";
"|" = ":pipe<space>";
D = ":move Trash<Enter>";
A = ":archive flat<Enter>";
"<C-l>" = ":open-link <space>";
f = ":forward <Enter>";
rr = ":reply -a<Enter>";
rq = ":reply -aq<Enter>";
Rr = ":reply<Enter>";
Rq = ":reply -q<Enter>";
H = ":toggle-headers<Enter>";
"<C-k>" = ":prev-part<Enter>";
"<C-j>" = ":next-part<Enter>";
J = ":next <Enter>";
K = ":prev<Enter>";
};
"view::passthrough" = {
"$noinherit" = "true";
"$ex" = "<C-x>";
"<Esc>" = ":toggle-key-passthrough<Enter>";
};
compose = {
# Keybindings used when the embedded terminal is not selected in the compose
# view
"$noinherit" = "true";
"$ex" = "<C-x>";
"<C-k>" = ":prev-field<Enter>";
"<C-j>" = ":next-field<Enter>";
"<tab>" = ":next-field<Enter>";
"<C-p>" = ":prev-tab<Enter>";
"<C-n>" = ":next-tab<Enter>";
};
"compose::editor" = {
# Keybindings used when the embedded terminal is selected in the compose view
"$noinherit" = "true";
"$ex" = "<C-x>";
"<C-k>" = ":prev-field<Enter>";
"<C-j>" = ":next-field<Enter>";
"<C-p>" = ":prev-tab<Enter>";
"<C-n>" = ":next-tab<Enter>";
};
"compose::review" = {
# Keybindings used when reviewing a message to be sent
y = ":send <Enter>";
n = ":abort<Enter>";
p = ":postpone<Enter>";
q = ":choose -o d discard abort -o p postpone postpone<Enter>";
e = ":edit<Enter>";
a = ":attach<space>";
d = ":detach<space>";
};
terminal = {
"$noinherit" = "true";
"$ex" = "<C-x>";
"<C-p>" = ":prev-tab<Enter>";
"<C-n>" = ":next-tab<Enter>";
};
};
extraConfig = {
ui.sort = "-r date";
ui.timestamp-format = "2006-01-02 15:04";
ui.mouse-enabled = true;
ui.spinner = ". , .";
general.unsafe-accounts-conf = true;
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)";
};
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/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";
"application/x-sh" = "${pkgs.bat}/bin/bat -fP -l sh";
};
openers = let
as-pdf = pkgs.writers.writeDash "as-pdf" ''
d=$(mktemp -d)
trap clean EXIT
clean() {
rm -rf "$d"
}
${pkgs.libreoffice}/bin/libreoffice --headless --convert-to pdf "$1" --outdir "$d"
${pkgs.zathura}/bin/zathura "$d"/*.pdf
'';
in {
"image/*" = "${pkgs.nsxiv}/bin/nsxiv";
"application/pdf" = "${pkgs.zathura}/bin/zathura";
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" = toString as-pdf;
"application/vnd.oasis.opendocument.text" = toString as-pdf;
"video/*" = "${pkgs.mpv}/bin/mpv";
"audio/*" = "${pkgs.mpv}/bin/mpv";
};
};
templates = {
# new_message = "hello!";
};
};
};
}

View File

@@ -6,7 +6,11 @@
}: let
alacritty-cfg = theme:
(pkgs.formats.yaml {}).generate "alacritty.yml" {
window.opacity = 0.95;
bell = {
animation = "EaseOut";
duration = 100;
color = "#ffffff";
};
font = {
normal.family = "Monospace";
size = 6;
@@ -42,7 +46,8 @@
alacritty-pkg = pkgs.symlinkJoin {
name = "alacritty";
paths = [
(pkgs.writeDashBin "alacritty" ''
(pkgs.writers.writeDashBin "alacritty" ''
${pkgs.alacritty}/bin/alacritty --config-file /var/theme/config/alacritty.yml msg create-window "$@" ||
${pkgs.alacritty}/bin/alacritty --config-file /var/theme/config/alacritty.yml "$@"
'')
pkgs.alacritty
@@ -51,12 +56,28 @@
in {
environment.variables.TERMINAL = "alacritty";
environment.systemPackages = [
alacritty-pkg
];
environment.etc = {
"themes/dark/alacritty.yml".source = alacritty-cfg (import <niveum/lib/colours/ayu-dark.nix>);
"themes/light/alacritty.yml".source = alacritty-cfg (import <niveum/lib/colours/ayu-light.nix>);
home-manager.users.me = {
programs.alacritty = {
enable = true;
settings = {
key_bindings = [
{
key = "Plus";
mods = "Control";
action = "IncreaseFontSize";
}
{
key = "Minus";
mods = "Control";
action = "DecreaseFontSize";
}
{
key = "Key0";
mods = "Control";
action = "ResetFontSize";
}
];
};
};
};
}

5
configs/android.nix Normal file
View File

@@ -0,0 +1,5 @@
{
programs.adb.enable = true;
users.users.me.extraGroups = ["adbusers"];
}

View File

@@ -3,7 +3,7 @@
config,
...
}: let
inherit (import <niveum/lib>) restic;
inherit (import ../lib) restic;
in {
services.restic.backups.niveum = {
initialize = true;
@@ -12,17 +12,23 @@ in {
OnCalendar = "8:00";
RandomizedDelaySec = "1h";
};
passwordFile = toString <secrets/restic/password>;
passwordFile = config.age.secrets.restic.path;
extraBackupArgs = [
"--exclude=/home/kfm/projects/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/cloud"
"/home/kfm/.gnupg"
"/home/kfm/.ssh"
"/mnt/sd-card/music"
"/mnt/sd-card/Books"
];
};
@@ -35,7 +41,7 @@ in {
environment.systemPackages = [
(pkgs.writers.writeDashBin "restic-niveum" ''
${pkgs.restic}/bin/restic -r ${restic.repository} -p ${<secrets/restic/password>} "$@"
${pkgs.restic}/bin/restic -r ${restic.repository} -p ${config.age.secrets.restic.path} "$@"
'')
(pkgs.writers.writeDashBin "restic-mount" ''
mountdir=$(mktemp -d)
@@ -43,7 +49,7 @@ in {
clean() {
rm -r "$mountdir"
}
${pkgs.restic}/bin/restic -r ${restic.repository} -p ${<secrets/restic/password>} mount "$mountdir"
${pkgs.restic}/bin/restic -r ${restic.repository} -p ${config.age.secrets.restic.path} mount "$mountdir"
'')
];
}

View File

@@ -1,7 +1,7 @@
{
{pkgs, ...}: {
programs.bash = {
promptInit = ''
PS1="$(tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(tput sgr0) "'';
PS1="$(${pkgs.ncurses}/bin/tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(${pkgs.ncurses}/bin/tput sgr0) "'';
interactiveShellInit = ''
set -o vi
'';

View File

@@ -1,4 +1,8 @@
{pkgs, ...}: {
{
pkgs,
config,
...
}: {
programs.chromium = {
enable = true;
extensions = [
@@ -11,6 +15,82 @@
];
};
home-manager.users.me = {
programs.firefox = {
enable = true;
package = pkgs.firefox.override {
cfg = {
enableTridactylNative = true;
};
};
profiles = let
defaultSettings = {
"beacon.enabled" = false;
"browser.bookmarks.showMobileBookmarks" = true;
"browser.newtab.preload" = false;
"browser.search.isUS" = false;
"browser.search.region" = "DE";
"browser.send_pings" = false;
"browser.shell.checkDefaultBrowser" = false;
"browser.startup.homepage" = "chrome://browser/content/blanktab.html";
"browser.uidensity" = 1;
"browser.urlbar.placeholderName" = "Search";
"datareporting.healthreport.service.enabled" = false;
"datareporting.healthreport.uploadEnabled" = false;
"datareporting.policy.dataSubmissionEnabled" = false;
"datareporting.sessions.current.clean" = true;
"distribution.searchplugins.defaultLocale" = "de-DE";
"general.smoothScroll" = true;
"identity.fxaccounts.account.device.name" = config.networking.hostName;
"network.cookie.cookieBehavior" = 1;
"privacy.donottrackheader.enabled" = true;
"privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.pbmode.enabled" = true;
"privacy.trackingprotection.socialtracking.enabled" = true;
"services.sync.declinedEngines" = "passwords";
"services.sync.engine.passwords" = false;
"signon.autofillForms" = false;
"signon.rememberSignons" = false;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"toolkit.telemetry.archive.enabled" = false;
"toolkit.telemetry.bhrPing.enabled" = false;
"toolkit.telemetry.cachedClientID" = "";
"toolkit.telemetry.enabled" = false;
"toolkit.telemetry.firstShutdownPing.enabled" = false;
"toolkit.telemetry.hybridContent.enabled" = false;
"toolkit.telemetry.newProfilePing.enabled" = false;
"toolkit.telemetry.prompted" = 2;
"toolkit.telemetry.rejected" = true;
"toolkit.telemetry.server" = "";
"toolkit.telemetry.shutdownPingSender.enabled" = false;
"toolkit.telemetry.unified" = false;
"toolkit.telemetry.unifiedIsOptIn" = false;
"toolkit.telemetry.updatePing.enabled" = false;
"ui.prefersReducedMotion" = 1;
};
in {
default = {
id = 0;
isDefault = true;
settings = defaultSettings;
# extensions = with pkgs.nur.repos.rycee.firefox-addons; [
# ublock-origin
# darkreader
# sponsorblock
# consent-o-matic
# i-dont-care-about-cookies
# # auto-tab-discard TODO what is this
# ];
userChrome = ''
#TabsToolbar {
visibility: collapse !important;
}
'';
};
};
};
};
environment.systemPackages = [pkgs.brave];
environment.variables.BROWSER = "brave";

7
configs/clipboard.nix Normal file
View File

@@ -0,0 +1,7 @@
{
config,
pkgs,
...
}: {
services.clipmenu.enable = true;
}

View File

@@ -4,41 +4,17 @@
pkgs,
...
}: let
inherit (import <niveum/lib>) tmpfilesConfig;
inherit (import ../lib) tmpfilesConfig;
in {
imports = [
<niveum/modules/dropbox.nix>
];
niveum = {
dropbox.enable = false;
};
systemd.tmpfiles.rules = map tmpfilesConfig [
{
type = "L+";
user = config.users.users.me.name;
group = "users";
mode = "0755";
argument = "${config.users.users.me.home}/cloud/Seafile/Wiki";
path = "${config.users.users.me.home}/notes";
}
{
type = "L+";
user = config.users.users.me.name;
group = "users";
mode = "0755";
argument = "${config.users.users.me.home}/cloud/Seafile/Uni";
argument = "${config.users.users.me.home}/cloud/nextcloud/Uni";
path = "${config.users.users.me.home}/uni";
}
{
type = "L+";
user = config.users.users.me.name;
group = "users";
mode = "0755";
argument = "${config.users.users.me.home}/cloud/syncthing/common/mahlzeit";
path = "${config.users.users.me.home}/mahlzeit";
}
];
home-manager.users.me = {
@@ -55,25 +31,68 @@ in {
};
};
systemd.user.services.nextcloud-syncer = {
enable = false;
wants = ["network-online.target"];
wantedBy = ["default.target"];
startAt = "*:00/10";
script = let
kieran = {
user = "kieran";
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
endpoint = "https://cloud.kmein.de";
target = "${config.users.users.me.home}/notes";
};
in ''
mkdir -p ${lib.escapeShellArg kieran.target}
${pkgs.nextcloud-client}/bin/nextcloudcmd --non-interactive --user ${kieran.user} --password "$(cat ${kieran.passwordFile})" --path /Notes ${lib.escapeShellArg kieran.target} ${kieran.endpoint}
'';
serviceConfig = {
Type = "oneshot";
Restart = "on-failure";
};
};
environment.systemPackages = [
(pkgs.writers.writeDashBin "book" ''
set -efu
book="$({
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/syncthing/library -type f
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/Seafile/Books -type f
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/nextcloud/Books -type f
} | ${pkgs.fzf}/bin/fzf)"
${pkgs.zathura}/bin/zathura "$book"
exec ${pkgs.zathura}/bin/zathura "$book"
'')
(let
kieran = {
user = "kieran.meinhardt@gmail.com";
passwordFile = config.age.secrets.mega-password.path;
};
megatools = command: ''${pkgs.megatools}/bin/megatools ${command} --username ${lib.escapeShellArg kieran.user} --password "$(cat ${kieran.passwordFile})"'';
in
pkgs.writers.writeDashBin "book-mega" ''
set -efu
selection="$(${megatools "ls"} | ${pkgs.fzf}/bin/fzf)"
test -n "$selection" || exit 1
tmpdir="$(mktemp -d)"
trap clean EXIT
clean() {
rm -rf "$tmpdir"
}
(
cd "$tmpdir"
${megatools "get"} "$selection"
exec ${pkgs.zathura}/bin/zathura "$(basename "$selection")"
)
'')
];
fileSystems."/media/moodle" = {
device = "zaatar.r:/moodle";
fsType = "nfs";
options = [
"x-systemd.idle-timeout=600"
"noauto"
"x-systemd.automount"
];
age.secrets.mega-password = {
file = ../secrets/mega-password.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
services.syncthing = rec {
@@ -82,15 +101,20 @@ in {
openDefaultPorts = true;
configDir = "/home/kfm/.config/syncthing";
dataDir = "/home/kfm/.config/syncthing";
cert = toString <system-secrets/syncthing/cert.pem>;
key = toString <system-secrets/syncthing/key.pem>;
inherit ((import <niveum/lib>).syncthing) devices;
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";

View File

@@ -1,8 +0,0 @@
{
services.compton = {
enable = true;
shadow = true;
menuOpacity = 0.9;
shadowOpacity = 0.3;
};
}

View File

@@ -1,40 +0,0 @@
{
config,
pkgs,
...
}: let
copyqConfig = pkgs.writers.writeDash "copyq-config" ''
${pkgs.copyq}/bin/copyq config check_clipboard true
${pkgs.copyq}/bin/copyq config check_selection false
${pkgs.copyq}/bin/copyq config copy_clipboard true
${pkgs.copyq}/bin/copyq config copy_selection false
${pkgs.copyq}/bin/copyq config activate_closes true
${pkgs.copyq}/bin/copyq config clipboard_notification_lines 0
${pkgs.copyq}/bin/copyq config clipboard_tab \&clipboard
${pkgs.copyq}/bin/copyq config disable_tray false
${pkgs.copyq}/bin/copyq config hide_tabs false
${pkgs.copyq}/bin/copyq config hide_toolbar false
${pkgs.copyq}/bin/copyq config item_popup_interval true
${pkgs.copyq}/bin/copyq config maxitems 1000
${pkgs.copyq}/bin/copyq config move true
${pkgs.copyq}/bin/copyq config text_wrap true
'';
in {
environment.systemPackages = [pkgs.copyq];
systemd.user.services.copyq = {
wantedBy = ["graphical-session.target"];
environment = {
DISPLAY = ":${toString config.services.xserver.display}";
};
serviceConfig = {
SyslogIdentifier = "copyq";
ExecStart = "${pkgs.copyq}/bin/copyq";
ExecStartPost = copyqConfig;
Restart = "always";
RestartSec = "15s";
StartLimitBurst = 0;
};
};
}

View File

@@ -2,68 +2,77 @@
pkgs,
lib,
config,
options,
niveumPackages,
inputs,
...
}: let
inherit (lib.strings) makeBinPath;
inherit (import <niveum/lib>) localAddresses kieran;
inherit (import ../lib) localAddresses kieran;
defaultApplications = (import ../lib).defaultApplications {inherit pkgs;};
in {
imports = [
<home-manager/nixos>
<niveum/modules/system-dependent.nix>
inputs.self.nixosModules.system-dependent
inputs.self.nixosModules.power-action
{
boot.supportedFilesystems = ["ntfs"];
}
{
nix.nixPath = [
"/var/src"
"nixpkgs-overlays=${toString ../overlays}"
];
}
{
nixpkgs = {
config = {
allowUnfree = true;
packageOverrides = pkgs: {
dmenu = pkgs.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"'';
gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {};
tocharian-font = pkgs.callPackage <niveum/packages/tocharian-font.nix> {};
iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> {};
ix = pkgs.callPackage <niveum/packages/ix.nix> {};
rofi-pass = pkgs.rofi-pass.overrideAttrs (final: previous: {
patches = [
# password store androi
<niveum/packages/rofi-pass.patch>
];
});
};
permittedInsecurePackages = [
"qtwebkit-5.212.0-alpha4"
];
};
overlays = [
(self: super: {
scripts = import <niveum/packages/scripts> {
pkgs = super;
lib = super.lib;
};
})
];
};
}
{
boot.cleanTmpDir = true;
boot.tmp.cleanOnBoot = true;
boot.loader.timeout = 1;
}
{
age.secrets = {
di-fm-key = {
file = ../secrets/di-fm-key.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
restic = {
file = ../secrets/restic.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
}
{
home-manager.users.me = {
programs.zathura = {
enable = true;
options = {
selection-clipboard = "clipboard";
recolor-keephue = true;
# first-page-column = "1:1"; # makes side-by-side mode start on the left side
};
};
};
}
{
environment.systemPackages = [
pkgs.capitaine-cursors
];
home-manager.users.me = {
home.pointerCursor = {
name = "capitaine-cursors-white";
package = pkgs.capitaine-cursors;
size = 12;
};
};
}
{
users.mutableUsers = false;
@@ -72,38 +81,16 @@ in {
users.users.me = {
name = "kfm";
description = kieran.name;
hashedPassword = "$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/";
passwordFile = config.age.secrets.kfm-password.path;
isNormalUser = true;
uid = 1000;
};
home-manager.users.me.xdg.enable = true;
home-manager.users.me.dconf.enable = false;
}
{
sound.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"
]
}
'';
age.secrets = {
kfm-password.file = ../secrets/kfm-password.age;
};
users.users.me.extraGroups = ["audio"];
environment.systemPackages = [pkgs.pavucontrol pkgs.ncpamixer pkgs.pamixer pkgs.pulsemixer];
home-manager.users.me.xdg.enable = true;
}
{
environment.interactiveShellInit = "export PATH=$PATH:$HOME/projects/niveum";
@@ -121,13 +108,13 @@ in {
cd "$(mktemp -d)"
pwd
'';
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}";
swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}";
in {
"ß" = "${pkgs.utillinux}/bin/setsid";
cat = "${pkgs.bat}/bin/bat --style=plain";
"ß" = "${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.iproute}/bin/ip -c";
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";
@@ -135,7 +122,7 @@ in {
mv = "mv --interactive";
nixi = "nix repl '<nixpkgs>'";
ns = "nix-shell --run zsh";
o = "${pkgs.xdg_utils}/bin/xdg-open";
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";
@@ -196,7 +183,14 @@ in {
}
{programs.command-not-found.enable = true;}
{
programs.gnupg.agent.enable = true;
home-manager.users.me = {
services.gpg-agent = rec {
enable = true;
enableZshIntegration = true;
defaultCacheTtl = 2 * 60 * 60;
maxCacheTtl = 4 * defaultCacheTtl;
};
};
environment.systemPackages = [
pkgs.gnupg
@@ -223,19 +217,38 @@ in {
{
home-manager.users.me.home.stateVersion = "22.05";
}
{
systemd.user.services.udiskie = {
after = ["udisks2.service"];
wants = ["udisks2.service"];
wantedBy = ["graphical-session.target"];
serviceConfig = {
ExecStart = "${pkgs.udiskie}/bin/udiskie --verbose --no-config --notify";
};
};
services.udisks2.enable = true;
programs.dconf.enable = true;
home-manager.users.me = {
dconf.enable = true;
dconf.settings = {
# Change the default terminal for Nemo
"org/cinnamon/desktop/applications/terminal".exec = defaultApplications.terminal;
};
};
}
./android.nix
./stylix.nix
./alacritty.nix
./backup.nix
./bash.nix
./beets.nix
./bluetooth.nix
./aerc.nix
./ccc.nix
./khal.nix
./chromium.nix
./clipboard.nix
./cloud.nix
./copyq.nix
./compton.nix
./direnv.nix
./distrobump.nix
./docker.nix
./dunst.nix
./flix.nix
@@ -245,39 +258,39 @@ in {
./hledger.nix
./htop.nix
./hu-berlin.nix
./fu-berlin.nix
./fysi.nix
./i3.nix
./i3status-rust.nix
./keyboard.nix
./lb.nix
./mpv.nix
./mime.nix
./neovim.nix
./neomutt.nix
./nix.nix
./newsboat.nix
./flameshot-once.nix
./flameshot.nix
./packages.nix
./picom.nix
./stardict.nix
./polkit.nix
./power-action.nix
./printing.nix
# ./openweathermap.nix
./wallpaper.nix
./redshift.nix
./retiolum.nix
./rofi.nix
./spacetime.nix
./seafile.nix
./ssh.nix
./sshd.nix
./sound.nix
./sudo.nix
./nsxiv.nix
./themes.nix
./tmux.nix
./traadfri.nix
./unclutter.nix
./vscode.nix
./watson.nix
./zsh.nix
./tor.nix
./stw-berlin.nix
./mastodon-bot.nix
];
}

View File

@@ -10,7 +10,7 @@
cat > shell.nix <<'EOF'
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = [];
packages = [];
}
EOF
''${EDITOR:-vim} shell.nix

View File

@@ -3,7 +3,7 @@
pkgs,
...
}: let
inherit (import <niveum/lib>) defaultApplications colours theme;
inherit (import ../lib) defaultApplications theme;
in {
home-manager.users.me.services.dunst = {
enable = true;
@@ -11,16 +11,13 @@ in {
settings = {
global = {
transparency = 10;
font = "Monospace 8";
geometry = "200x5-30+20";
frame_color = colours.foreground;
follow = "mouse";
indicate_hidden = true;
notification_height = 0;
separator_height = 2;
padding = 8;
horizontal_padding = 8;
separator_color = "auto";
sort = true;
markup = "full";
format = "%a\\n<b>%s</b>\\n%b";
@@ -43,22 +40,13 @@ in {
mouse_right_click = "close_current";
mouse_middle_click = "close_all";
};
urgency_low = rec {
frame_color = background;
background = colours.foreground;
foreground = colours.background;
urgency_low = {
timeout = 5;
};
urgency_normal = rec {
frame_color = background;
background = colours.foreground;
foreground = colours.background;
urgency_normal = {
timeout = 10;
};
urgency_critical = rec {
frame_color = background;
background = colours.red.dark;
foreground = colours.background;
urgency_critical = {
timeout = 0;
};
};

View File

@@ -1,45 +0,0 @@
{
lib,
pkgs,
...
}: let
inherit (import <niveum/lib>) defaultApplications;
flameshot-once =
pkgs.callPackage <stockholm/krebs/5pkgs/simple/flameshot-once> {};
in {
environment.systemPackages = [
(flameshot-once.override {
config = {
imgur = {
enable = true;
createUrl = "http://p.r/image";
deleteUrl = "http://p.r/image/delete/%1";
xdg-open.browser = (defaultApplications pkgs).browser;
};
timeout = 1000;
drawColor = "#ff0000";
drawThickness = 2;
showDesktopNotification = true;
buttons = [
"ARROW"
"BLUR"
"CIRCLE"
"CIRCLECOUNT"
"COPY"
"DRAWER"
"EXIT"
"IMAGEUPLOADER"
"MARKER"
"MOVESELECTION"
"PENCIL"
"RECTANGLE"
"SAVE"
"SELECTION"
"SELECTIONINDICATOR"
"TEXT"
"UNDO"
];
};
})
];
}

23
configs/flameshot.nix Normal file
View File

@@ -0,0 +1,23 @@
{
lib,
pkgs,
...
}: {
home-manager.users.me = {
services.flameshot = {
enable = true;
settings.General = {
autoCloseIdleDaemon = true;
drawColor = "#ff0000";
drawThickness = 2;
checkForUpdates = false;
showDesktopNotification = true;
disabledTrayIcon = true;
showHelp = false;
squareMagnifier = true;
uploadWithoutConfirmation = true;
buttons = ''@Variant(\0\0\0\x7f\0\0\0\vQList<int>\0\0\0\0\x10\0\0\0\x2\0\0\0\x5\0\0\0\x13\0\0\0\xa\0\0\0\x1\0\0\0\xc\0\0\0\xd\0\0\0\x6\0\0\0\x8\0\0\0\0\0\0\0\xf\0\0\0\x4\0\0\0\xb\0\0\0\x3\0\0\0\x12\0\0\0\x9)'';
};
};
};
}

View File

@@ -4,14 +4,16 @@
...
}: let
flixLocation = "/media/flix";
flixLocationNew = "/media/flix-new";
cacheLocation = "/var/cache/flix";
indexFilename = "index";
indexFilenameNew = "index-new";
flixUser = "flix";
flixGroup = "users";
inherit (import <niveum/lib>) tmpfilesConfig;
inherit (import ../lib) tmpfilesConfig;
in {
fileSystems.${flixLocation} = {
device = "prism.r:/export";
device = "prism.r:/export/download";
fsType = "nfs";
options = [
"noauto"
@@ -26,6 +28,20 @@ in {
];
};
fileSystems.${flixLocationNew} = {
device = "//yellow.r/public";
fsType = "cifs";
options = [
"guest"
"nofail"
"noauto"
"ro"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
];
};
systemd.tmpfiles.rules = [
(tmpfilesConfig {
type = "d";
@@ -39,7 +55,10 @@ in {
systemd.services.flix-index = {
description = "Flix indexing service";
wants = ["network-online.target"];
script = "cp ${flixLocation}/download/index ./${indexFilename}";
script = ''
cp ${flixLocation}/index ./${indexFilename}
cp ${flixLocationNew}/index ./${indexFilenameNew}
'';
startAt = "hourly";
serviceConfig = {
Type = "oneshot";
@@ -69,12 +88,11 @@ in {
'')
(pkgs.writers.writeDashBin "flixmenu" ''
set -efu
cd "${flixLocation}/download"
[ -f "${cacheLocation}/${indexFilename}" ] || exit 1
${pkgs.dmenu}/bin/dmenu -i -p flix -l 5 "$@" < ${cacheLocation}/${indexFilename} \
| ${pkgs.findutils}/bin/xargs -I '{}' ${pkgs.utillinux}/bin/setsid ${pkgs.xdg_utils}/bin/xdg-open '{}'
(
${pkgs.gnused}/bin/sed 's#^\.#${flixLocation}#' ${cacheLocation}/${indexFilename}
${pkgs.gnused}/bin/sed 's#^\.#${flixLocationNew}#' ${cacheLocation}/${indexFilenameNew}
) | ${pkgs.dmenu}/bin/dmenu -i -p flix -l 5 "$@" \
| ${pkgs.findutils}/bin/xargs -I '{}' ${pkgs.util-linux}/bin/setsid ${pkgs.xdg-utils}/bin/xdg-open '{}'
'')
];
}

View File

@@ -1,4 +1,56 @@
{pkgs, ...}: {
{
pkgs,
niveumPackages,
...
}: let
zip-font = name: arguments: let
directory = pkgs.fetchzip arguments;
in
pkgs.runCommand name {} ''
mkdir -p $out/share/fonts/{truetype,opentype,woff}
${pkgs.findutils}/bin/find ${directory} -name '*.ttf' -exec install '{}' $out/share/fonts/truetype \;
${pkgs.findutils}/bin/find ${directory} -name '*.otf' -exec install '{}' $out/share/fonts/opentype \;
${pkgs.findutils}/bin/find ${directory} -name '*.woff' -exec install '{}' $out/share/fonts/woff \;
'';
simple-ttf = name: arguments: let
file = pkgs.fetchurl arguments;
in
pkgs.runCommand name {} ''
mkdir -p $out/share/fonts/truetype
install ${file} $out/share/fonts/truetype
'';
egyptianHiero = zip-font "EgyptianHiero" {
url = "https://github.com/MKilani/Djehuty/archive/master.zip";
sha256 = "sha256-KbY4vedm757NWfDlgmNhslbZd+2Vs+o5PjtMMGDt61Y=";
};
antinoou = zip-font "Antinoou" {
url = "https://www.evertype.com/fonts/coptic/AntinoouFont.zip";
sha256 = "0jwihj08n4yrshcx07dnaml2x9yws6dgyjkvg19jqbz17drbp3sw";
stripRoot = false;
};
newGardiner = zip-font "NewGardiner" {
url = "https://mjn.host.cs.st-andrews.ac.uk/egyptian/fonts/NewGardiner.zip";
hash = "sha256-i7ZBN28no/884fYMA7ZJ47WpkwZXzY//TK0bDz21pE0=";
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";
};
jsesh = simple-ttf "JSesh" {
url = "http://files.qenherkhopeshef.org/jsesh/JSeshFont.ttf";
sha256 = "1203jrk2xzvgckcc5hx88kja1i3h8gm1wiyla5j6gspc0hbv56ry";
};
egyptianText = simple-ttf "EgyptianText-1.0beta" {
url = "http://c.krebsco.de/EgyptianText-v1.0-beta.ttf";
sha256 = "0cfjbk7xxnxhlp6v922psm5j1xzrv6wfk226ji2wz2yfrnkbcbsv";
};
in {
fonts = {
enableDefaultFonts = true;
fontDir.enable = true;
@@ -7,19 +59,29 @@
alegreya-sans
amiri
annapurna-sil
antinoou
cantarell-fonts
cardo
charis-sil
doulos-sil
newAthenaUnicode
corefonts
crimson
eb-garamond
ipaexfont
jsesh
egyptianHiero
egyptianText
font-awesome_6
etBook
newGardiner
junicode2
ezra-sil
fira
font-awesome
galatia-sil
gentium
gfs-fonts
niveumPackages.gfs-fonts
gyre-fonts
ibm-plex
jetbrains-mono
@@ -39,16 +101,28 @@
source-sans-pro
source-serif-pro
theano
tocharian-font
niveumPackages.tocharian-font
vistafonts
vollkorn
zilla-slab
]; # google-fonts league-of-moveable-type
fontconfig.defaultFonts = {
monospace = ["Noto Sans Mono"];
fontconfig.defaultFonts = rec {
monospace = ["Noto Sans Mono"] ++ emoji;
serif = ["Noto Serif" "Noto Naskh Arabic" "Noto Serif Devanagari"];
sansSerif = ["Noto Sans Display" "Noto Kufi Arabic" "Noto Sans Devanagari" "Noto Sans CJK JP"];
emoji = ["Noto Color Emoji" "Noto Emoji"];
sansSerif = ["Noto Sans Display" "Noto Naskh Arabic" "Noto Sans Devanagari" "Noto Sans CJK JP" "Noto Sans Coptic"];
emoji = ["Noto Color Emoji"];
};
# xelatex fails with woff files
# ref https://tex.stackexchange.com/questions/392144/xelatex-and-fontspec-crash-trying-to-find-woff-file-for-some-fonts-but-not-other
fontconfig.localConf = ''
<fontconfig>
<!-- Reject WOFF fonts We don't register WOFF(2) fonts with fontconfig because of the W3C spec -->
<selectfont>
<rejectfont>
<glob>*.woff*</glob>
</rejectfont>
</selectfont>
</fontconfig>
'';
};
}

80
configs/fu-berlin.nix Normal file
View File

@@ -0,0 +1,80 @@
{
config,
pkgs,
lib,
...
}: let
username = "meinhak99";
inherit (import ../lib/email.nix) defaults;
fu-defaults = rec {
imap.host = "mail.zedat.fu-berlin.de";
smtp.host = imap.host;
folders.drafts = "Entwürfe";
folders.sent = "Gesendet";
folders.trash = "Papierkorb";
};
in {
home-manager.users.me = {
programs.ssh = {
matchBlocks = {
fu-berlin = {
user = username;
hostname = "login.zedat.fu-berlin.de";
setEnv.TERM = "xterm";
};
};
};
accounts.email.accounts = {
fu-student =
lib.recursiveUpdate defaults
(lib.recursiveUpdate fu-defaults
rec {
userName = "meinhak99";
address = "kieran.meinhardt@fu-berlin.de";
aliases = ["${userName}@fu-berlin.de"];
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-meinhak99.path}";
});
};
};
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";
};
};
age.secrets = {
email-password-meinhak99 = {
file = ../secrets/email-password-meinhak99.age;
owner = config.users.users.me.name;
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;
mode = "400";
};
};
systemd.services.fu-vpn = {
enable = true;
wants = ["network-online.target"];
serviceConfig.LoadCredential = "password:${config.age.secrets.email-password-meinhak99.path}";
script = ''
if ${pkgs.wirelesstools}/bin/iwgetid | ${pkgs.gnugrep}/bin/grep --invert-match eduroam
then
cat "$CREDENTIALS_DIRECTORY/password" | ${pkgs.openconnect}/bin/openconnect vpn.fu-berlin.de --user ${username} --passwd-on-stdin
fi
'';
};
}

55
configs/fysi.nix Normal file
View File

@@ -0,0 +1,55 @@
{
config,
lib,
pkgs,
...
}: let
inherit (import ../lib/email.nix) defaults;
sshIdentity = name: "${config.users.users.me.home}/.ssh/${name}";
in {
age.secrets = {
email-password-fysi = {
file = ../secrets/email-password-fysi.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
home-manager.users.me = {
accounts.email.accounts = {
fysi =
lib.recursiveUpdate defaults
rec {
address = "kieran@fysi.tech";
userName = address;
passwordCommand = "${pkgs.coreutils}/bin/cat ${config.age.secrets.email-password-fysi.path}";
flavor = "fastmail.com";
};
};
programs.ssh.matchBlocks = rec {
"nextcloud.fysi.dev" = {
hostname = "116.203.82.203";
user = "root";
};
"lingua.miaengiadina.ch" = {
hostname = "135.181.85.233";
user = "root";
};
"cms-dev.woc2023.app".identityFile = sshIdentity "fysiweb";
"cms-master.woc2023.app".identityFile = sshIdentity "fysiweb";
"fysi-dev1" = {
hostname = "94.130.229.139";
user = "root";
identityFile = sshIdentity "fysiweb";
};
${fysi-dev1.hostname} = fysi-dev1;
"fysi-shared0" = {
hostname = "49.12.205.235";
user = "root";
identityFile = sshIdentity "fysiweb";
};
};
};
}

View File

@@ -1,36 +1,22 @@
{
pkgs,
lib,
...
}: {
environment = {
systemPackages = [pkgs.fzf];
variables = {
FZF_DEFAULT_OPTS =
lib.escapeShellArgs ["--height=40%" "--layout=reverse"];
FZF_ALT_C_COMMAND = "${pkgs.fd}/bin/fd --type d";
FZF_ALT_C_OPTS = lib.escapeShellArgs [
"--preview='${pkgs.tree}/bin/tree -L 1 \"{}\"'"
{pkgs, ...}: {
programs.fzf = {
fuzzyCompletion = true;
keybindings = true;
};
home-manager.users.me = {
programs.fzf = rec {
enable = true;
defaultCommand = "${pkgs.fd}/bin/fd --type f --strip-cwd-prefix --follow --no-ignore-vcs --exclude .git";
defaultOptions = ["--height=40%"];
changeDirWidgetCommand = "${pkgs.fd}/bin/fd --type d";
changeDirWidgetOptions = [
"--preview='${pkgs.tree}/bin/tree -L 1 {}'"
"--bind=space:toggle-preview"
"--preview-window=hidden"
];
FZF_CTRL_T_COMMAND = "${pkgs.fd}/bin/fd --type f";
FZF_CTRL_T_OPTS =
lib.escapeShellArgs ["--preview='${pkgs.bat}/bin/bat \"{}\"'"];
fileWidgetCommand = defaultCommand;
fileWidgetOptions = ["--preview='head -$LINES {}'"];
};
};
programs.zsh.interactiveShellInit = ''
if [[ $options[zle] = on ]]; then
. ${pkgs.fzf}/share/fzf/completion.zsh
. ${pkgs.fzf}/share/fzf/key-bindings.zsh
fi
'';
programs.bash.interactiveShellInit = ''
if [[ :$SHELLOPTS: =~ :(vi|emacs): ]]; then
. ${pkgs.fzf}/share/fzf/completion.bash
. ${pkgs.fzf}/share/fzf/key-bindings.bash
fi
'';
}

View File

@@ -2,13 +2,15 @@
pkgs,
config,
lib,
inputs,
...
}: let
inherit (import <niveum/lib>) kieran ignorePaths;
inherit (import ../lib) kieran ignorePaths;
in {
environment.systemPackages = [
pkgs.mr
pkgs.git
pkgs.git-crypt
pkgs.gitAndTools.gitflow
pkgs.gitAndTools.gh
pkgs.gitAndTools.git-extras
@@ -17,7 +19,7 @@ in {
pkgs.gitstats
pkgs.patch
pkgs.patchutils
pkgs.git-preview
inputs.self.packages.x86_64-linux.git-preview
];
environment.shellAliases = {
@@ -49,6 +51,7 @@ in {
pull.ff = "only";
rebase.autoStash = true;
merge.autoStash = true;
push.autoSetupRemote = true;
# # ref https://github.com/dandavison/delta
# core.pager = "${pkgs.delta}/bin/delta";

View File

@@ -3,11 +3,12 @@
pkgs,
...
}: {
imports = [<niveum/modules/hledger.nix>];
environment.systemPackages = let
timeLedger = "$HOME/projects/ledger/time.timeclock";
ledgerDirectory = "$HOME/projects/ledger";
timeLedger = "${ledgerDirectory}/time.timeclock";
git = "${pkgs.git}/bin/git -C ${ledgerDirectory}";
in [
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)"
'')
@@ -16,21 +17,23 @@
'')
(pkgs.writers.writeDashBin "hora-filli" ''
${pkgs.hledger}/bin/hledger -f "${timeLedger}" register fillidefilla -O csv \
-b "$(date -d "$(date +%Y-%m)-20 last month" +%Y-%m-%d)" \
-e "$(date -d "$(date +%Y-%m)-20" +%Y-%m-%d)" \
-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
'')
];
niveum.hledger = {
enable = true;
ledgerFile = "$HOME/projects/ledger/all.journal";
server = {
enable = false;
user = config.users.users.me;
package = pkgs.hledger-web;
};
package = pkgs.hledger;
};
(pkgs.writers.writeDashBin "hledger-git" ''
if [ "$1" = entry ]; then
${pkgs.hledger}/bin/hledger balance -V > "${ledgerDirectory}/balance.txt"
${git} add balance.txt
${git} commit --all --message="$(date -Im)"
else
${git} $*
fi
'')
(pkgs.writers.writeDashBin "hledger-edit" ''
$EDITOR ${ledgerDirectory}/current.journal
'')
];
}

View File

@@ -20,7 +20,7 @@
show_thread_names = false;
sort_descending = true;
sort_key = "PERCENT_CPU";
tree_view = true;
tree_view = false;
update_process_names = false;
right_meters = ["Uptime" "Tasks" "LoadAverage" "Battery"];
left_meters = ["LeftCPUs2" "RightCPUs2" "Memory" "Swap"];

View File

@@ -4,21 +4,21 @@
lib,
...
}: let
inherit (lib.strings) fileContents;
inherit (import <niveum/lib>) sshPort;
eduroam = {
identity = fileContents <secrets/eduroam/identity>;
password = fileContents <secrets/eduroam/password>;
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"
"username=meinhaki"
"password=${lib.strings.fileContents <secrets/mail/meinhaki>}"
"credentials=${config.age.secrets.cifs-credentials-hu-berlin.path}"
"noauto"
"x-systemd.requires=hu-vpn.service"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
@@ -36,13 +36,126 @@ in {
options = hu-berlin-cifs-options;
};
home-manager.users.me.programs.ssh = {
matchBlocks = {
"alew.hu-berlin.de" = {
user = "centos";
hostname = "141.20.187.219";
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 = [
@@ -62,34 +175,26 @@ in {
)
];
# 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"];
conflicts = ["openvpn-hu-berlin.service"];
serviceConfig.LoadCredential = "password:${config.age.secrets.email-password-meinhark.path}";
script = ''
${pkgs.openfortivpn}/bin/openfortivpn -c ${
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
trusted-cert = 42193a913d276d9eb86217612956e1e6464d6f07bed5393a4787c87adc4bd359
username = ${eduroam.identity}@split_tunnel
password = ${eduroam.password}
username = meinhark
''
}
fi
'';
};
systemd.services.openvpn-hu-berlin.conflicts = ["hu-vpn.service"];
services.openvpn.servers.hu-berlin = {
autoStart = false;
authUserPass = {
username = eduroam.identity;
password = eduroam.password;
};
config = fileContents (pkgs.fetchurl {
url = "https://www.cms.hu-berlin.de/de/dl/netze/vpn/openvpn/hu-berlin.ovpn";
sha256 = "15b55aibik5460svjq2gwxrcyh6ay4k8savd6cd5lncgndmd8p8h";
});
};
}

View File

@@ -2,17 +2,27 @@
config,
pkgs,
lib,
niveumPackages,
...
}: let
inherit (import <niveum/lib>) defaultApplications colours;
klem = import <niveum/packages/scripts/klem.nix> {
inherit pkgs lib;
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" ''
${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 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
'';
@@ -26,21 +36,23 @@
${pkgs.coreutils}/bin/tr '[A-Za-z]' '[N-ZA-Mn-za-m]'
'';
"ipa" = pkgs.writers.writeDash "ipa" ''
${pkgs.scripts.ipa}/bin/ipa
${niveumPackages.ipa}/bin/ipa
'';
"betacode" = pkgs.writers.writeDash "betacode" ''
${pkgs.scripts.betacode}/bin/betacode
${niveumPackages.betacode}/bin/betacode
'';
"devanagari" = pkgs.writers.writeDash "devanagari" ''
${pkgs.scripts.devanagari}/bin/devanagari
'';
"avesta" = pkgs.writeScript "avesta" (builtins.readFile <niveum/packages/scripts/avesta.sed>);
"curl" = pkgs.writers.writeDash "curl" ''
${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)"
'';
ocr = pkgs.writers.writeDash "ocr" ''
${pkgs.tesseract4}/bin/tesseract -l eng+deu - stdout
'';
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
'';
};
};
@@ -51,6 +63,23 @@
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 = {
file = ../secrets/github-token-i3status-rust.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
openweathermap-api-key = {
file = ../secrets/openweathermap-api-key.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
programs.slock.enable = true;
services.xserver = {
displayManager.defaultSession = "none+i3";
windowManager.i3 = {
@@ -74,17 +103,18 @@ in {
'';
};
home-manager.users.me.xsession.windowManager.i3 = {
home-manager.users.me.xsession.windowManager.i3 = let
modifier = "Mod4";
in {
enable = true;
extraConfig = ''
bindsym --release ${modifier}+Shift+w exec /run/wrappers/bin/slock
'';
config = rec {
fonts = {
names = ["Sans"];
size = 10.0;
};
modifier = "Mod4";
inherit modifier;
window = {
titlebar = false;
border = 1;
border = 2;
hideEdgeBorders = "smart";
commands = [
{
@@ -95,6 +125,10 @@ in {
criteria = {class = "fzfmenu";};
command = "floating enable";
}
{
criteria = {class = ".*";};
command = "border pixel 2";
}
{
criteria = {class = "mpv";};
command = lib.strings.concatStringsSep ", " [
@@ -112,70 +146,31 @@ in {
titlebar = false;
border = 1;
};
colors = let
scheme = {
background = colours.background;
text = colours.foreground;
};
in rec {
focused =
scheme
// {
border = colours.cyan.bright;
indicator = colours.cyan.bright;
childBorder = colours.cyan.bright;
};
unfocused =
scheme
// {
border = colours.background;
indicator = colours.background;
childBorder = colours.background;
};
focusedInactive = unfocused;
urgent =
scheme
// {
border = colours.red.bright;
indicator = colours.red.bright;
childBorder = colours.red.bright;
};
placeholder =
scheme
// {
border = colours.green.bright;
indicator = colours.green.bright;
childBorder = colours.green.bright;
};
};
bars = [
{
workspaceButtons = false;
fonts = {
names = ["Monospace" "Font Awesome 6 Free"];
size = 8.0;
};
mode = "hide"; # "dock"
position = "bottom";
colors = rec {
background = colours.background;
separator = background;
statusline = colours.foreground;
bindingMode = {
background = colours.red.bright;
border = colours.background;
text = colours.foreground;
(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;
};
};
statusCommand = "env I3RS_GITHUB_TOKEN=${lib.strings.fileContents <secrets/github/notification.token>} ${pkgs.i3status-rust}/bin/i3status-rs ${
(pkgs.formats.toml {}).generate "i3status-rust.toml" (import <niveum/lib/i3status-rust.nix> {
inherit (config.niveum) batteryName wirelessInterface;
inherit colours;
inherit pkgs;
})
}";
}
})
];
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"'';
@@ -196,10 +191,10 @@ in {
"${modifier}+Shift+b" = "move window to workspace prev";
"${modifier}+Shift+n" = "move window to workspace next";
"${modifier}+Shift+x" = "exec --no-startup-id ${move-to-new-workspace}";
"${modifier}+Shift+x" = "exec ${move-to-new-workspace}";
"${modifier}+b" = "workspace prev";
"${modifier}+n" = "workspace next";
"${modifier}+x" = "exec --no-startup-id ${new-workspace}";
"${modifier}+x" = "exec ${new-workspace}";
"${modifier}+Shift+c" = "reload";
"${modifier}+Shift+q" = "kill";
@@ -217,62 +212,45 @@ in {
"${modifier}+r" = "mode resize";
"${modifier}+v" = "split v";
"${modifier}+w" = "layout tabbed";
"${modifier}+q" = "exec ${pkgs.writers.writeDash "newsboat-sync" ''
notify-send --app-name="newsboat" "Updating ..."
newsboat -x reload
notify-send --app-name="newsboat" "Finished updating."
''}";
"${modifier}+q" = "exec ${config.services.clipmenu.package}/bin/clipmenu";
# "${modifier}+Shift+y" = "exec ${pkgs.qutebrowser}/bin/qutebrowser";
"${modifier}+Return" = "exec ${(defaultApplications pkgs).terminal}";
"${modifier}+t" = "exec ${(defaultApplications pkgs).fileManager}";
"${modifier}+y" = "exec ${(defaultApplications pkgs).browser}";
"${modifier}+0" = "exec ${pkgs.scripts.menu-calc}/bin/=";
"${modifier}+0" = "exec ${niveumPackages.menu-calc}/bin/=";
"${modifier}+Shift+w" = "exec ${pkgs.scripts.k-lock}/bin/k-lock";
"${modifier}+d" = "exec ${pkgs.writers.writeDash "run" ''exec ${pkgs.rofi}/bin/rofi -modi run,window,ssh,filebrowser -show run''}";
"${modifier}+Shift+d" = "exec ${
pkgs.writers.writeDash "notemenu" ''
set -efu
PATH=$PATH:${
lib.makeBinPath [pkgs.rofi pkgs.findutils pkgs.coreutils]
}
cd ~/notes
note_file=$({
echo diary/$(date -I).md
echo diary/$(date -I -d yesterday).md
find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2
} | rofi -dmenu -i -p 'notes')
if test "$note_file"
then
i3-sensible-terminal -e "$EDITOR" "$note_file"
fi
''
}";
"${modifier}+p" = "exec --no-startup-id ${pkgs.rofi-pass}/bin/rofi-pass";
"${modifier}+u" = "exec ${pkgs.scripts.unicodmenu}/bin/unicodmenu";
"${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}+F6" = "exec ${pkgs.xorg.xkill}/bin/xkill";
"${modifier}+F7" = "exec ${pkgs.scripts.showkeys-toggle}/bin/showkeys-toggle";
"${modifier}+F7" = "exec ${pkgs.writers.writeDash "showkeys-toggle" ''
if ${pkgs.procps}/bin/pgrep screenkey; then
exec ${pkgs.procps}/bin/pkill screenkey
else
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-once";
"XF86AudioLowerVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -d 5";
"XF86AudioMute" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -t";
"XF86AudioRaiseVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -i 5";
"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 --no-startup-id ${pkgs.playerctl}/bin/playerctl pause";
"XF86AudioPlay" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioNext" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPrev" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioStop" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl stop";
"XF86ScreenSaver" = "exec ${pkgs.scripts.k-lock}/bin/k-lock";
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl 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 ${pkgs.scripts.dmenurandr}/bin/dmenurandr";
"XF86Display" = "exec ${niveumPackages.dmenu-randr}/bin/dmenu-randr";
# key names detected with xorg.xev:
# XF86WakeUp (fn twice)

175
configs/i3status-rust.nix Normal file
View File

@@ -0,0 +1,175 @@
{
pkgs,
config,
...
}: {
home-manager.users.me = {
programs.i3status-rust = {
enable = true;
bars.bottom = {
icons = "awesome6";
settings = {
theme.overrides = let
colours = config.lib.stylix.colors.withHashtag;
in {
idle_bg = colours.base00;
idle_fg = colours.base05;
good_bg = colours.base00;
good_fg = colours.base0B;
warning_bg = colours.base00;
warning_fg = colours.base0A;
critical_bg = colours.base00;
critical_fg = colours.base09;
info_bg = colours.base00;
info_fg = colours.base04;
separator_bg = colours.base00;
separator = " ";
};
};
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 = "net";
format = " $icon HU";
missing_format = "";
device = "ppp0";
}
{
block = "net";
format = " $icon FU";
missing_format = "";
device = "tun0";
}
{
block = "net";
device = config.niveum.wirelessInterface;
format = "$icon $ssid $signal_strength";
}
{
block = "battery";
device = config.niveum.batteryName;
}
{
block = "sound";
}
{
block = "disk_space";
format = "$icon $available";
}
{
block = "memory";
format = "$icon $mem_used.eng(prefix:G)";
}
{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
)
}'
'';
}
];
};
};
};
}

View File

@@ -10,6 +10,11 @@
gr = "polytonic";
ru = "phonetic";
ara = "buckwalter";
cop = "";
ave = "";
got = "";
"in" = "san-kagapa";
il = "phonetic";
};
defaultLanguage = "de";
in {
@@ -19,9 +24,37 @@ in {
# 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;
xkbOptions = commaSep xkbOptions;
libinput.enable = true;
xkbDir = 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";
};
}
])
];
};
};
console.keyMap = "de";

View File

@@ -6,17 +6,47 @@
}: let
davHome = "~/.local/share/dav";
kmeinCloud = {
davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
davEndpoint = "https://cloud.kmein.de/remote.php/dav";
username = "kieran";
password = lib.fileContents <secrets/nextcloud/password>;
passwordFile = config.age.secrets.nextcloud-password-kieran.path;
};
fysiCloud = {
davEndpoint = "https://nextcloud.fysi.dev/remote.php/dav";
username = "kmein";
password = lib.fileContents <secrets/nextcloud-fysi/password>;
passwordFile = config.age.secrets.nextcloud-password-fysi.path;
};
in {
environment.systemPackages = [pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman];
age.secrets = {
nextcloud-password-kieran = {
file = ../secrets/nextcloud-password-kieran.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
nextcloud-password-fysi = {
file = ../secrets/nextcloud-password-fysi.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
};
environment.systemPackages = [
pkgs.khal
pkgs.vdirsyncer
pkgs.khard
pkgs.todoman
(pkgs.writers.writeDashBin "todo-procrastinate" ''
[ $# -eq 1 ] || {
echo "Usage: $0 TODO_ID" >&2
exit 1
}
todo_id=$1
new_timestamp=$(${pkgs.todoman}/bin/todo --porcelain show "$todo_id" | ${pkgs.jq}/bin/jq '.due + 24 * 60 * 60')
new_date=$(${pkgs.coreutils}/bin/date +"%Y-%m-%d %H:%M" -d "@$new_timestamp")
${pkgs.todoman}/bin/todo edit "$todo_id" --due "$new_date"
'')
];
systemd.user.services.vdirsyncer = {
enable = true;
@@ -24,8 +54,7 @@ in {
wantedBy = ["default.target"];
startAt = "*:00/10";
script = ''
${pkgs.vdirsyncer}/bin/vdirsyncer sync
${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
${pkgs.vdirsyncer}/bin/vdirsyncer sync && ${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
'';
serviceConfig = {
Type = "oneshot";
@@ -82,6 +111,10 @@ in {
path = ${davHome}/calendar/personal
color = "light cyan"
[[krebs]]
path = ${davHome}/calendar/krebs
color = "light red"
[[uni]]
path = ${davHome}/calendar/uni-1
color = "yellow"
@@ -132,6 +165,12 @@ in {
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"
@@ -152,19 +191,25 @@ in {
type = "carddav"
url = "${kmeinCloud.davEndpoint}/addressbooks/users/${kmeinCloud.username}/"
username = "${kmeinCloud.username}"
password = "${kmeinCloud.password}"
password.fetch = ["command", "cat", "${kmeinCloud.passwordFile}"]
[storage kalender_cloud]
type = "caldav"
url = "${kmeinCloud.davEndpoint}/calendars/${kmeinCloud.username}/"
username = "${kmeinCloud.username}"
password = "${kmeinCloud.password}"
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 = "${fysiCloud.password}"
password.fetch = ["command", "cat", "${fysiCloud.passwordFile}"]
'';
};
};

View File

@@ -9,7 +9,7 @@
startAt = "weekly";
serviceConfig = {
user = "kfm";
WorkingDirectory = "/home/kfm/cloud/Seafile/Books/Germanistik/LB";
WorkingDirectory = "/home/kfm/cloud/nextcloud/Books/Germanistik/LB";
};
script = ''
first_year=2019

19
configs/mastodon-bot.nix Normal file
View File

@@ -0,0 +1,19 @@
{pkgs, ...}: {
systemd.services.imaginary-illuminations = {
enable = false;
wants = ["network-online.target"];
serviceConfig = {
User = "kfm";
Group = "users";
WorkingDirectory = "/home/kfm/cloud/Seafile/Documents/Media/imaginary-illuminations";
Restart = "on-failure";
RestartSec = "15s";
};
startAt = "7:00";
script = ''
${pkgs.deno}/bin/deno run -A post.ts
'';
};
systemd.timers.imaginary-illuminations.timerConfig.RandomizedDelaySec = "14h";
}

View File

@@ -10,15 +10,15 @@
"image/jpeg" = "nsxiv.desktop";
"image/png" = "nsxiv.desktop";
"image/vnd.djvu+multipage" = "org.pwmt.zathura.desktop";
"text/html" = "brave-browser.desktop";
"text/html" = "firefox.desktop";
"text/markdown" = "nvim.desktop";
"text/plain" = "nvim.desktop";
"x-scheme-handler/about" = "brave-browser.desktop";
"x-scheme-handler/http" = "brave-browser.desktop";
"x-scheme-handler/https" = "brave-browser.desktop";
"x-scheme-handler/mailto" = "brave-browser.desktop";
"x-scheme-handler/unknown" = "brave-browser.desktop";
"x-scheme-handler/webcal" = "brave-browser.desktop";
"x-scheme-handler/about" = "firefox.desktop";
"x-scheme-handler/http" = "firefox.desktop";
"x-scheme-handler/https" = "firefox.desktop";
"x-scheme-handler/mailto" = "firefox.desktop";
"x-scheme-handler/unknown" = "firefox.desktop";
"x-scheme-handler/webcal" = "firefox.desktop";
"inode/directory" = "pcmanfm.desktop";
};
};

View File

@@ -14,6 +14,7 @@
nginx.enable = false;
node = {
enable = true;
openFirewall = true;
enabledCollectors = [
"conntrack"
"diskstats"
@@ -38,8 +39,6 @@
};
};
networking.firewall.allowedTCPPorts = [config.services.prometheus.exporters.node.port];
systemd.services.promtail = {
description = "Promtail service for Loki";
wantedBy = ["multi-user.target"];

View File

@@ -2,9 +2,10 @@
pkgs,
lib,
config,
niveumPackages,
...
}: let
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}";
swallow = command: "${niveumPackages.swallow}/bin/swallow ${command}";
in {
environment.shellAliases.smpv = swallow "mpv";
@@ -22,6 +23,7 @@ in {
ytdl-raw-options = lib.concatStringsSep "," [''sub-lang="de,en"'' "write-sub=" "write-auto-sub="];
screenshot-template = "%F-%wH%wM%wS-%#04n";
script-opts = "ytdl_hook-ytdl_path=${pkgs.yt-dlp}/bin/yt-dlp";
ao = "pulse"; # no pipewire for me :(
};
bindings = {
"Alt+RIGHT" = "add video-rotate 90";
@@ -35,7 +37,7 @@ in {
};
scripts = [
pkgs.mpvScripts.youtube-quality
(pkgs.callPackage <niveum/packages/mpv-visualizer.nix> {})
niveumPackages.mpv-visualizer
];
};
};

View File

@@ -1,164 +0,0 @@
{
pkgs,
lib,
...
}: let
mainMailbox = "posteo";
accounts = import <niveum/lib/email.nix> {inherit lib mainMailbox;};
in {
environment.systemPackages = [pkgs.neomutt];
environment.shellAliases.mua = "${pkgs.neomutt}/bin/neomutt -f ${mainMailbox}";
home-manager.users.me.xdg.configFile."neomutt/neomuttrc".text = let
as-pdf = pkgs.writers.writeDash "as-pdf" ''
d=$(mktemp -d)
trap clean EXIT
clean() {
rm -rf "$d"
}
${pkgs.libreoffice}/bin/libreoffice --headless --convert-to pdf "$1" --outdir "$d"
${pkgs.zathura}/bin/zathura "$d"/*.pdf
'';
in ''
set mailcap_path = ${
pkgs.writeText "mailcap" ''
text/plain; $EDITOR %s ;
text/html; ${pkgs.lynx}/bin/lynx -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput;
image/*; ${pkgs.nsxiv}/bin/nsxiv %s ;
video/*; ${pkgs.utillinux}/bin/setsid ${pkgs.mpv}/bin/mpv --quiet %s &; copiousoutput
audio/*; ${pkgs.mpv}/bin/mpv %s ;
application/pdf; ${pkgs.zathura}/bin/zathura %s ;
application/pgp-encrypted; ${pkgs.gnupg}/bin/gpg -d '%s'; copiousoutput;
application/pgp-keys; ${pkgs.gnupg}/bin/gpg --import '%s'; copiousoutput;
application/vnd.openxmlformats-officedocument.wordprocessingml.document; ${as-pdf} %s;
application/vnd.oasis.opendocument.text; ${as-pdf} %s;
application/vnd.openxmlformats*; ${pkgs.libreoffice}/bin/soffice '%s';
''
}:$mailcap_path
set sidebar_visible
set sidebar_format = "%D%?F? [%F]?%* %?N?%N/?%S"
set sidebar_width = 25 # Plenty of space
set sidebar_divider_char = '' # Pretty line-drawing character
set mail_check_stats
set index_format="%2C %Z %D %-15.15L %s"
set date_format="%F %R"
set sort = 'reverse-date'
set sleep_time = 0 # Pause 0 seconds for informational messages
set markers = no # Disables the `+` displayed at line wraps
set mark_old = no # Unread mail stay unread until read
set wait_key = no # mutt won't ask "press key to continue"
set fast_reply # skip to compose when replying
set forward_format = "Fwd: %s" # format of subject when forwarding
set reverse_name # reply as whomever it was to
set include=ask-no # don't include message in replies
auto_view text/html # automatically show html (mailcap uses lynx)
auto_view application/pgp-encrypted
alternative_order text/plain text/enriched text/html
set abort_noattach abort_noattach_regex="\<(attach|attached|attachments?|anbei|Anhang|angehängt)\>"
set attach_save_dir=/tmp
set fast_reply
set narrow_tree # narrow threads for more depth
bind index,pager B sidebar-toggle-visible # Use 'B' to switch the Sidebar on and off
bind index,pager \Ck sidebar-prev
bind index,pager \Cj sidebar-next
bind index,pager \Co sidebar-open
bind index,pager \Cp sidebar-prev-new
bind index,pager \Cn sidebar-next-new
macro index * <limit>~F\r
macro index + <limit>all\r
set query_command = "khard email --parsable %s"
bind editor <Tab> complete-query
bind editor ^T complete
set mail_check = 90
set timeout = 15
# set imap_check_subscribed
set use_from
set header_cache="~/.cache/mutt" message_cachedir="~/.cache/mutt"
source ${
pkgs.writeText "accounts.neomuttrc" ''
set realname = "Kierán Meinhardt"
account-hook . 'unset imap_user imap_pass smtp_user smtp_pass'
# set accordingly: postponed trash record
${
lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: let
imapRoot = "imaps://${account.user}@${account.imap}";
in ''
account-hook ${account.user}@${account.imap} 'set imap_user="${account.user}" imap_pass="${account.password}"'
account-hook ${account.user}@${account.smtp} 'set smtp_user="${account.user}" smtp_pass="${account.password}"'
folder-hook ${account.user}@${account.imap} 'set smtp_url="${account.smtpSettings "${account.user}@${account.smtp}"}" from="${account.address}" record="${imapRoot}/${account.folders.sent}" postponed="${imapRoot}/${account.folders.drafts}" trash="${imapRoot}/${account.folders.trash}"'
named-mailboxes "${name}" "${imapRoot}" "${name}" "${imapRoot}/${account.folders.sent}"
'')
accounts)
}
''
}
set spoolfile="${mainMailbox}"
source ${
pkgs.writeText "colors.neomuttrc" ''
# Default index colors:
color index_number blue default
color index red default '.*'
color index_flags lightcyan default '.*'
color index_author yellow default '.*'
color index_subject default default '.*'
# New mail is boldened:
color index_author lightyellow default "~N"
color index_subject lightwhite default "~N"
# Flagged mail is highlighted:
color index_flags lightmagenta default '~F'
# Other colors and aesthetic settings:
mono bold bold
mono underline underline
mono error bold
mono indicator reverse
# color sidebar_flagged red black
mono sidebar_new bold
color error red default
color message cyan default
color search brightmagenta default
color hdrdefault lightblack default
color quoted green default
color quoted1 blue default
color quoted2 cyan default
color quoted3 yellow default
color quoted4 red default
color quoted5 brightred default
color signature lightblack default
color tree color235 default
# Regex highlighting:
color header red default "^(Date)"
color header yellow default "^(From)"
color header white default "^(B?CC)"
color header brightwhite default "^(Subject)"
color body cyan default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
color body red default "(BAD signature)|^gpg: BAD signature from.*"
color body brightgreen default "(Good signature)|^gpg: Good signature .*"
color body brightyellow default "^gpg: "
mono body bold "^gpg: Good signature"
mono body bold "^gpg: BAD signature from.*"
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
''
}
'';
}

View File

@@ -1,78 +1,40 @@
{pkgs, ...}: {
{
pkgs,
niveumPackages,
...
}: {
environment.variables.EDITOR = pkgs.lib.mkForce "nvim";
environment.shellAliases.vi = "nvim";
environment.shellAliases.vim = "nvim";
environment.shellAliases.view = "nvim -R";
nixpkgs.config.packageOverrides = pkgs: {
vimPlugins =
pkgs.vimPlugins
// {
cheat-sh-vim = pkgs.callPackage <niveum/packages/vimPlugins/cheat-sh.nix> {};
vim-fetch = pkgs.callPackage <niveum/packages/vimPlugins/vim-fetch.nix> {};
vim-colors-paramount = pkgs.callPackage <niveum/packages/vimPlugins/vim-colors-paramount.nix> {};
vim-256noir = pkgs.callPackage <niveum/packages/vimPlugins/vim-256noir.nix> {};
icalendar-vim = pkgs.callPackage <niveum/packages/vimPlugins/icalendar-vim.nix> {};
jq-vim = pkgs.callPackage <niveum/packages/vimPlugins/jq-vim.nix> {};
vim-fsharp = pkgs.callPackage <niveum/packages/vimPlugins/vim-fsharp.nix> {};
vim-reason-plus = pkgs.callPackage <niveum/packages/vimPlugins/vim-reason-plus.nix> {};
vim-mail = pkgs.callPackage <niveum/packages/vimPlugins/vim-mail.nix> {};
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 "$@"'')
(pkgs.neovim.override {
configure = {
customRC = builtins.readFile <niveum/lib/vim/init.vim>;
packages.nvim = with pkgs.vimPlugins; {
start = [
ale
fzf-vim
fzfWrapper
supertab
undotree
tabular
# vimwiki
vim-colors-paramount
vim-commentary
vim-css-color
vim-eunuch
vim-fetch
vim-fugitive
vim-gitgutter
vim-repeat
vim-sensible
vim-surround
(pkgs.vimUtils.buildVimPlugin {
name = "vim-dim-1.1.0";
src = pkgs.fetchFromGitHub {
owner = "jeffkreeftmeijer";
repo = "vim-dim";
rev = "1.1.0";
sha256 = "sha256-lyTZUgqUEEJRrzGo1FD8/t8KBioPrtB3MmGvPeEVI/g=";
};
})
];
opt = [
csv
elm-vim
emmet-vim
haskell-vim
icalendar-vim
jq-vim
rust-vim
typescript-vim
vim-javascript
vim-ledger
vim-nix
vimtex
vim-pandoc
vim-pandoc-syntax
vim-256noir
];
};
};
})
niveumPackages.vim
];
}

View File

@@ -42,8 +42,6 @@
};
};
in {
imports = [<niveum/modules/networkmanager-declarative.nix>];
programs.nm-applet.enable = true;
networking.networkmanager = {
@@ -55,39 +53,6 @@ in {
wifi.macAddress = "random";
ethernet.macAddress = "random";
unmanaged = ["docker*"];
profiles = lib.mapAttrs profile {
Aether = {
connection.uuid = "7138bb0f-1aeb-4905-890e-a6628427aa21";
ipv6.addr-gen-mode = "stable";
wifi.cloned-mac-address = "stable";
wifi-security = {
psk = lib.strings.fileContents <secrets/wifi/Aether.psk>;
auth-alg = "open";
key-mgmt = "wpa-psk";
};
};
FactoryCommunityGuest = {
connection.uuid = "fb1f2e52-651e-48b5-a72c-1accddf31afb";
connection.timestamp = "1631885129";
wifi.seen-bssids = "54:EC:2F:19:30:DC;54:EC:2F:19:5C:9C;54:EC:2F:58:E4:3C;";
wifi-security = {
psk = "Factory4ever";
auth-alg = "open";
key-mgmt = "wpa-psk";
};
};
o2-WLAN66 = {
connection.uuid = "c563aec3-f344-4ffb-8d1c-60a6cdac8fe0";
wifi-security = {
psk = "PK3468KV488T934U";
auth-alg = "open";
key-mgmt = "wpa-psk";
};
};
"WIFI@DB".connection.uuid = "4eff4e94-8850-4e9f-a338-1787d0d90479";
eduroam = eduroamProfile;
eduroam_5GHz = eduroamProfile;
};
};
users.users.me.extraGroups = ["networkmanager"];

View File

@@ -1,6 +1,7 @@
{
pkgs,
config,
lib,
...
}: let
ytdl-format = "'bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best'";
@@ -8,10 +9,32 @@
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-bin = "${pkgs.scripts.linkhandler}/bin/linkhandler";
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
@@ -21,12 +44,12 @@
text-width 85
external-url-viewer "${pkgs.urlscan}/bin/urlscan -dc -r '${linkhandler-bin} {}'"
browser ${linkhandler-bin}
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-bin}
macro v set browser "${pkgs.utillinux}/bin/setsid -f ${pkgs.mpv}/bin/mpv" ; open-in-browser ; set browser ${linkhandler-bin}
macro y set browser "${youtube-download}" ; open-in-browser ; set browser ${linkhandler-bin}
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
@@ -61,16 +84,15 @@
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 {
nixpkgs.config.packageOverrides = pkgs: {
newsboat = pkgs.writers.writeDashBin "newsboat" ''
${pkgs.newsboat}/bin/newsboat -C ${newsboat-config} -c ${newsboat-home}/cache.db -u ${newsboat-home}/urls "$@"
'';
};
environment.systemPackages = [
pkgs.newsboat
(pkgs.writers.writeDashBin "newsboat-unread-count" ''

View File

@@ -1,24 +1,14 @@
{pkgs, ...}: {
{
pkgs,
inputs,
...
}: {
nixpkgs = {
config.allowUnfree = true;
overlays = [
(import <nix-writers/pkgs>)
(import <stockholm/krebs/5pkgs>)
];
};
nix = {
package = pkgs.nixUnstable;
package = pkgs.nixFlakes;
extraOptions = "experimental-features = nix-command flakes";
settings = {
substituters = [
"http://cache.prism.r"
"https://cache.nixos.org/"
];
trusted-public-keys = [
"cache.prism-1:+S+6Lo/n27XEtvdlQKuJIcb1yO5NUqUCE2lolmTgNJU="
"cache.prism-2:YwmCm3/s/D+SxrPKN/ETjlpw/219pNUbpnluatp6FKI="
"hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs="
];
};
nixPath = ["nixpkgs=${inputs.nixpkgs}"];
};
}

View File

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

View File

@@ -1,12 +1,13 @@
{
config,
pkgs,
lib,
inputs,
niveumPackages,
unstablePackages,
...
}: let
hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {};
worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {};
menstruation = pkgs.callPackage <menstruation-backend> {};
pandoc-doc = pkgs.callPackage <niveum/packages/man/pandoc.nix> {};
worldradio = pkgs.callPackage ../packages/worldradio.nix {};
zoteroStyle = {
name,
@@ -53,8 +54,6 @@
' $out/astrolog/astrolog.as
'';
});
recht = pkgs.callPackage <recht> {};
in {
home-manager.users.me.home.file = {
".csl".source = cslDirectory;
@@ -72,11 +71,12 @@ in {
dnsutils
# FILE MANAGERS
lf
pcmanfm
cinnamon.nemo
# MEDIA
ffmpeg
imagemagick
exiftool
nsxiv
# ARCHIVE TOOLS
unzip
unrar
@@ -94,16 +94,17 @@ in {
file # determine file type
dos2unix
genpass # generate passwords
ncdu # ncurses disk usage
gdu # ncurses disk usage (ncdu is broken)
rmlint # remove duplicate files
gcc
python3Packages.jsonschema # json validation
jq # json toolkit
pup # html toolkit
htmlq
xsv # csv toolkit
xmlstarlet # xml toolkit
fq # toolkit for yaml, xml and binaries
man-pages
posix_man_pages
man-pages-posix
tree
exfat # to mount windows drives
parallel # for parallel, since moreutils shadows task spooler
@@ -124,6 +125,7 @@ in {
electrum
inkscape
astrolog
obsidian
anki-bin # flashcards
jbofihe # lojbanic software
zoom-us # video conferencing
@@ -132,69 +134,71 @@ in {
pdftk # pdf toolkit
mupdf
poppler_utils # pdf toolkit
foxitreader # for viewing pdf annotations
okular # the word is nucular
xournalpp # for annotating pdfs
pdfpc # presenter console for pdf slides
hc # print files as qr codes
niveumPackages.hc # print files as qr codes
yt-dlp
espeak
bc # calculator
pari # gp -- better calculator
scripts.auc
scripts.stackoverflow
scripts.infschmv
scripts.qrpaste
scripts.ttspaste
scripts.new-mac # get a new mac address
scripts.scanned
scripts.default-gateway
scripts.showkeys-toggle
scripts.kirciuoklis
scripts.favicon
scripts.heuretes
scripts.ipa # XSAMPA to IPA converter
scripts.playlist
scripts.mpv-tv
scripts.devanagari
scripts.betacode # ancient greek betacode to unicode converter
scripts.meteo
scripts.mahlzeit
recht
scripts.vimv
scripts.swallow # window swallowing
scripts.literature-quote
rink # unit converter
niveumPackages.auc
niveumPackages.cheat-sh
niveumPackages.infschmv
niveumPackages.qrpaste
niveumPackages.ttspaste
niveumPackages.new-mac # get a new mac address
niveumPackages.scanned
niveumPackages.default-gateway
niveumPackages.kirciuoklis
niveumPackages.image-convert-favicon
niveumPackages.heuretes
niveumPackages.ipa # XSAMPA to IPA converter
niveumPackages.pls
niveumPackages.mpv-tv
niveumPackages.devanagari
niveumPackages.betacode # ancient greek betacode to unicode converter
niveumPackages.meteo
niveumPackages.mahlzeit
niveumPackages.vimv
niveumPackages.swallow # window swallowing
niveumPackages.literature-quote
jless # less(1) for json
scripts.notetags
scripts.booksplit
scripts.dmenurandr
scripts.interdimensional-cable
scripts.dmenubluetooth
scripts.manual-sort
scripts.much-scripts
scripts.dns-sledgehammer
niveumPackages.booksplit
niveumPackages.dmenu-randr
niveumPackages.dmenu-bluetooth
niveumPackages.manual-sort
niveumPackages.dns-sledgehammer
ts
scripts.vg
scripts.fkill
scripts.wttr
scripts.unicodmenu
scripts.closest
scripts.trans
scripts.mpv-radio
niveumPackages.vg
niveumPackages.fkill
niveumPackages.wttr
niveumPackages.unicodmenu
niveumPackages.closest
niveumPackages.trans
(niveumPackages.mpv-radio.override {
di-fm-key-file = config.age.secrets.di-fm-key.path;
})
(niveumPackages.mpv-tuner.override {
di-fm-key-file = config.age.secrets.di-fm-key.path;
})
# kmein.slide
scripts.tolino-screensaver
scripts.rfc
scripts.tag
scripts.timer
python3Packages.eyeD3
scripts.menu-calc
termdown
niveumPackages.image-convert-tolino
niveumPackages.rfc
niveumPackages.tag
niveumPackages.timer
niveumPackages.menu-calc
nix-prefetch-git
scripts.nix-git
niveumPackages.nix-git
nixfmt
par
qrencode
menstruation
inputs.menstruation-backend.defaultPackage.x86_64-linux
inputs.agenix.packages.x86_64-linux.default
inputs.recht.defaultPackage.x86_64-linux
(pkgs.writers.writeDashBin "worldradio" ''
shuf ${worldradio} | ${pkgs.findutils}/bin/xargs ${pkgs.mpv}/bin/mpv --no-video
@@ -204,24 +208,30 @@ in {
${pkgs.openssh}/bin/ssh makanek "cd /var/lib/weechat/logs && grep --ignore-case --color=always --recursive $@" | ${pkgs.less}/bin/less --raw-control-chars
'')
(pkgs.writers.writeDashBin "ncmpcpp-zaatar" ''MPD_HOST=${(import <niveum/lib/local-network.nix>).zaatar} exec ${pkgs.ncmpcpp}/bin/ncmpcpp "$@"'')
(pkgs.writers.writeDashBin "mpc-zaatar" ''MPD_HOST=${(import <niveum/lib/local-network.nix>).zaatar} exec ${pkgs.mpc_cli}/bin/mpc "$@"'')
(pkgs.writers.writeDashBin "ncmpcpp-zaatar" ''MPD_HOST=${(import ../lib/local-network.nix).zaatar} exec ${pkgs.ncmpcpp}/bin/ncmpcpp "$@"'')
(pkgs.writers.writeDashBin "mpc-zaatar" ''MPD_HOST=${(import ../lib/local-network.nix).zaatar} exec ${pkgs.mpc_cli}/bin/mpc "$@"'')
inputs.scripts.packages.x86_64-linux.alarm
spotify
ncspot
playerctl
nix-index
scripts.nix-index-update
niveumPackages.nix-index-update
#krebs
dic
cyberlocker-tools
untilport
kpaste
irc-announce
git-preview
ircaids
niveumPackages.dic
niveumPackages.cyberlocker-tools
niveumPackages.untilport
niveumPackages.kpaste
config.nur.repos.mic92.ircsink
(haskellPackages.ghcWithHoogle (hs: [
hs.text
hs.lens
hs.bytestring
]))
(python3.withPackages (py: [
py.black
@@ -233,28 +243,41 @@ in {
py.pygments
py.schema
]))
python3Packages.poetry
# 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
html-tidy
nodePackages.csslint
nodePackages.jsonlint
nodePackages.prettier
nodePackages.typescript
nodePackages.eslint
nodePackages.yarn
deno # better node.js
nodejs
nodePackages.javascript-typescript-langserver
texlive.combined.scheme-full
latexrun
(aspellWithDicts (dict: [dict.de dict.en dict.en-computers]))
# haskellPackages.pandoc-citeproc
scripts.text2pdf
niveumPackages.text2pdf
lowdown
glow # markdown to term
libreoffice
# gnumeric
dia
pandoc
pandoc-doc
unstablePackages.pandoc
niveumPackages.man-pandoc
typst
# proselint
asciidoctor
wordnet
@@ -265,11 +288,22 @@ in {
shellcheck
(pkgs.writers.writeDashBin "hass-cli" ''
HASS_SERVER=http://zaatar.r:8123 HASS_TOKEN=${lib.strings.fileContents <secrets/hass/token>} exec ${pkgs.home-assistant-cli}/bin/hass-cli "$@"
HASS_SERVER=http://zaatar.r:8123 HASS_TOKEN="$(cat ${config.age.secrets.home-assistant-token.path})" exec ${pkgs.home-assistant-cli}/bin/hass-cli "$@"
'')
scripts.rofi-hass
# xml
saxonb_9_1
libxml2
zotero
];
age.secrets.home-assistant-token = {
file = ../secrets/home-assistant-token.age;
owner = config.users.users.me.name;
group = config.users.users.me.group;
mode = "400";
};
home-manager.users.me.xdg.configFile."pycodestyle".text = ''
[pycodestyle]
max-line-length = 110

25
configs/picom.nix Normal file
View File

@@ -0,0 +1,25 @@
{
services.picom = {
enable = true;
# activeOpacity = 1;
fade = true;
fadeDelta = 1;
# inactiveOpacity = 0.9;
# shadow = true;
# menuOpacity = 0.9;
# shadowOpacity = 0.3;
fadeExclude = [
"class_g = 'slock'" # don't want a transparent lock screen!
"name *?= 'slock'"
"focused = 1"
];
opacityRules = [
# opacity-rule overrides both inactive and active opacity
# video in browser tabs
# substring /regex match of title bar text
"99:name *?= 'Youtube'"
"99:WM_CLASS@:s *= 'mpv$'"
];
};
}

View File

@@ -5,15 +5,13 @@
}: let
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
in {
imports = [<stockholm/krebs/3modules/power-action.nix>];
krebs.power-action = {
services.power-action = {
enable = true;
plans.suspend = {
upperLimit = 7;
lowerLimit = 0;
charging = false;
action = pkgs.writeDash "suspend-wrapper" ''
action = pkgs.writers.writeDash "suspend-wrapper" ''
/run/wrappers/bin/sudo ${suspend}
'';
};
@@ -21,6 +19,6 @@ in {
};
security.sudo.extraConfig = ''
${config.krebs.power-action.user} ALL= (root) NOPASSWD: ${suspend}
${config.services.power-action.user} ALL= (root) NOPASSWD: ${suspend}
'';
}

View File

@@ -1,5 +1,5 @@
{pkgs, ...}: let
inherit (import <niveum/lib>) localAddresses;
inherit (import ../lib) localAddresses;
hp-driver = pkgs.hplip;
in {
services.printing = {

View File

@@ -3,9 +3,10 @@
pkgs,
...
}: {
imports = [
<niveum/modules/retiolum.nix>
];
networking.hosts = {"42:0:ca48:f98f:63d7:31ce:922b:245d" = ["go"];};
services.tinc.networks.retiolum = {
rsaPrivateKeyFile = config.age.secrets.retiolum-rsa.path;
ed25519PrivateKeyFile = config.age.secrets.retiolum-ed25519.path;
};
}

View File

@@ -1,13 +1,18 @@
{
config,
pkgs,
...
}: let
inherit (import <niveum/lib>) colours;
in {
{pkgs, ...}: {
home-manager.users.me.programs.rofi = {
enable = true;
font = "Monospace 10";
theme = "${pkgs.rofi}/share/rofi/themes/Arc-Dark.rasi";
pass = {
enable = true;
extraConfig = ''
_pwgen() {
${pkgs.genpass}/bin/genpass "$@"
}
USERNAME_field='login'
default_user2=kmein
help_color="#FF0000"
''; # help_color set by https://github.com/mrossinek/dotfiles/commit/13fc5f24caa78c8f20547bf473266879507f13bf
};
plugins = [pkgs.rofi-calc];
};
}

View File

@@ -7,4 +7,10 @@
fonts.fontconfig.enable = false;
nix.gc.automatic = true;
nix.optimise.automatic = true;
services.journald.extraConfig = "SystemMaxUse=500M";
# https://webzine.snowflake.ovh/issue-001.html -- garbage collect when less then 1 GB is available, make 3 GB fee
nix.extraOptions = ''
min-free = 1073741824
max-free = 3221225472
'';
}

45
configs/sound.nix Normal file
View File

@@ -0,0 +1,45 @@
{pkgs, ...}: {
sound.enable = true;
# realtime audio for pulseaudio
security.rtkit.enable = true;
services.pipewire = {
enable = false;
systemWide = false;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
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"
]
}
'';
};
users.users.me.extraGroups = ["pipewire" "audio"];
environment.systemPackages = [
pkgs.pavucontrol
pkgs.ncpamixer
pkgs.pamixer
pkgs.pulsemixer
pkgs.pulseaudio # for pactl
];
}

View File

@@ -1,27 +1,37 @@
{
pkgs,
config,
lib,
...
}: let
inherit (import <niveum/lib>) sshPort kieran;
externalNetwork = import <niveum/lib/external-network.nix>;
sshIdentity = name: "${config.users.users.me.home}/.ssh/${name}";
ssh-passphease = lib.strings.fileContents <system-secrets/ssh/passphrase>;
{pkgs, ...}: let
inherit (import ../lib) sshPort kieran;
externalNetwork = import ../lib/external-network.nix;
in {
services.xserver.displayManager.sessionCommands = toString (pkgs.writeScript "ssh-add" ''
#!${pkgs.expect}/bin/expect -f
spawn ${pkgs.openssh}/bin/ssh-add
expect "Enter passphrase for *:"
send "${ssh-passphrase}\n";
expect "Identity added: *"
interact
'');
programs.ssh.startAgent = true;
users.users.me.openssh.authorizedKeys.keys = kieran.sshKeys pkgs;
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
];
};
};
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
'';
home-manager.users.me.programs.ssh = {
enable = true;
matchBlocks = {
@@ -49,6 +59,11 @@ in {
user = "root";
port = sshPort;
};
tabula = {
hostname = "tabula.r";
user = "root";
port = sshPort;
};
manakish = {
hostname = "manakish.r";
user = "kfm";
@@ -59,24 +74,6 @@ in {
user = "kfm";
port = sshPort;
};
"nextcloud.fysi.dev" = {
hostname = "116.203.82.203";
user = "root";
};
"lingua.miaengiadina.ch" = {
hostname = "135.181.85.233";
user = "root";
};
"fysi-dev1" = {
hostname = "94.130.229.139";
user = "root";
identityFile = sshIdentity "fysiweb";
};
"fysi-shared0" = {
hostname = "49.12.205.235";
user = "root";
identityFile = sshIdentity "fysiweb";
};
};
};
}

View File

@@ -4,15 +4,17 @@
pkgs,
...
}: let
inherit (import <niveum/lib>) sshPort kieran;
inherit (import ../lib) sshPort kieran;
in {
users.motd = "Welcome to ${config.networking.hostName}!";
services.openssh = {
enable = true;
ports = [sshPort];
passwordAuthentication = false;
forwardX11 = true;
settings = {
PasswordAuthentication = false;
X11Forwarding = true;
};
};
users.users.root.openssh.authorizedKeys.keys = kieran.sshKeys pkgs;

View File

@@ -2,6 +2,7 @@
config,
pkgs,
lib,
inputs,
...
}: let
dictionaries = {
@@ -148,6 +149,7 @@
sha256 = "1pk234pbq4pk55d8sjk0pp9j5sajm82f8804kf2xm2x5p387q1rg";
};
};
coptic.dictionary = inputs.coptic-dictionary.packages.x86_64-linux.coptic-stardict;
russian = {
LingvoGermanRussian = pkgs.fetchzip {
url = "http://download.huzheng.org/lingvo/stardict-GR-LingvoUniversal-2.4.2.tar.bz2";
@@ -158,6 +160,16 @@
sha256 = "03f9wdmkgpjifpms7dyh10ma29wf3ka1j3zlp1av0cybhdldk2a8";
};
};
turkish = {
BabylonTurkishEnglish = pkgs.fetchzip {
url = "http://download.huzheng.org/babylon/bidirectional/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";
sha256 = "0myx31xzb7nrn5m657h0bwdgm5xp93ccwp6lcpbxgjxdjm3q0hc5";
};
};
};
makeStardictDataDir = dicts: pkgs.linkFarm "dictionaries" (lib.mapAttrsToList (name: path: {inherit name path;}) dicts);
@@ -169,7 +181,7 @@
exec ${pkgs.sdcv}/bin/sdcv --color --only-data-dir --data-dir ${makeStardictDataDir dicts} "$@"
'';
sdcvPager = pkgs.writeDash "sdcvPager" ''
sdcvPager = pkgs.writers.writeDash "sdcvPager" ''
export PATH=${lib.makeBinPath [pkgs.gnused pkgs.ncurses pkgs.less]}
sed "
s!<sup>1</sup>!¹!gI
@@ -292,16 +304,19 @@ in {
// dictionaries.sanskrit
// dictionaries.oed
// dictionaries.russian
// dictionaries.englishGerman));
// dictionaries.englishGerman
// dictionaries.turkish));
environment.systemPackages = [
pkgs.goldendict
# pkgs.goldendict
(makeStardict "lsj" dictionaries.classics)
(makeStardict "sa" dictionaries.sanskrit)
(makeStardict "oed" dictionaries.oed)
(makeStardict "sd-russian" dictionaries.russian)
(makeStardict "sd" dictionaries.englishGerman)
(makeStardict "jbo" dictionaries.lojban)
(makeStardict "cop" dictionaries.coptic)
(makeStardict "sd-turkish" dictionaries.turkish)
];
}
/*

51
configs/stw-berlin.nix Normal file
View File

@@ -0,0 +1,51 @@
{
pkgs,
config,
...
}: {
age.secrets.stw-berlin-card-code.file = ../secrets/stw-berlin-card-code.age;
systemd.services.stw-berlin = {
enable = true;
wants = ["network-online.target"];
startAt = "weekly";
serviceConfig = {
user = "kfm";
WorkingDirectory = "/home/kfm/cloud/nextcloud/Uni/Meta/Mensa";
LoadCredential = [
"password:${config.age.secrets.stw-berlin-card-code.path}"
];
};
script = ''
KARTEN_ID=8071859
PASSWORT=$(cat "$CREDENTIALS_DIRECTORY"/password)
endpoint=https://ks.stw.berlin:4433/TL1/TLM/KASVC
authorization_header='Authorization: Basic S0FTVkM6ekt2NXlFMUxaVW12VzI5SQ=='
get_auth_token() {
${pkgs.curl}/bin/curl -sSL "$endpoint/LOGIN?karteNr=$KARTEN_ID&format=JSON&datenformat=JSON" \
-X POST \
-H "$authorization_header" \
--data-raw '{"BenutzerID":"'$KARTEN_ID'","Passwort":"'$PASSWORT'"}' \
| ${pkgs.jq}/bin/jq -r '.[0].authToken|@uri'
}
get_transactions() {
${pkgs.curl}/bin/curl -sSL "$endpoint/TRANS?format=JSON&authToken=$(get_auth_token)&karteNr=$KARTEN_ID&datumVon=12.02.2018&datumBis=$(date -d tomorrow +%d.%m.%Y)" \
-H "$authorization_header" \
| ${pkgs.jq}/bin/jq
}
get_items() {
${pkgs.curl}/bin/curl -sSL "$endpoint/TRANSPOS?format=JSON&authToken=$(get_auth_token)&karteNr=$KARTEN_ID&datumVon=12.02.2018&datumBis=$(date -d tomorrow +%d.%m.%Y)" \
-H "$authorization_header" \
| ${pkgs.jq}/bin/jq
}
get_transactions > transactions-$(date -I).json
get_items > items-$(date -I).json
'';
};
}

71
configs/stylix.nix Normal file
View File

@@ -0,0 +1,71 @@
{
pkgs,
config,
lib,
inputs,
...
}: let
generatedWallpaper = pkgs.runCommand "wallpaper.png" {} ''
${inputs.wallpaper-generator.packages.x86_64-linux.wp-gen}/bin/wallpaper-generator lines \
--output $out \
${lib.concatMapStringsSep " "
(n: "--base0${lib.toHexString n}=${config.lib.stylix.colors.withHashtag."base0${lib.toHexString n}"}")
(lib.range 0 15)}
'';
in {
# https://danth.github.io/stylix/tricks.html
# stylix.image = inputs.wallpapers.outPath + "/meteora/rodrigo-soares-250630.jpg";
stylix.image = generatedWallpaper;
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.fonts = {
serif = {
package = pkgs.noto-fonts;
name = "Noto Serif";
};
sansSerif = {
package = pkgs.noto-fonts;
name = "Noto Sans";
};
monospace = {
package = pkgs.noto-fonts;
name = "Noto Sans Mono";
};
emoji = {
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
sizes = {
terminal = 6;
applications = 10;
};
};
}

View File

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

View File

@@ -1,6 +1,7 @@
{
pkgs,
lib,
config,
...
}: let
autorenkalender-package = pkgs.fetchFromGitHub {
@@ -15,12 +16,14 @@ in {
niveum.telegramBots.autorenkalender = {
enable = true;
time = "07:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
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";

View File

@@ -0,0 +1,36 @@
{
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

@@ -2,17 +2,13 @@
config,
pkgs,
lib,
inputs,
...
}: let
nixpkgs-21-11 = import (builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-21.11.tar.gz") {
config.permittedInsecurePackages = [
"python3.9-poetry-1.1.12"
];
};
telebots = nixpkgs-21-11.callPackage <telebots> {};
telebots = inputs.telebots.defaultPackage.x86_64-linux;
reverseDirectory = "/run/telegram-reverse";
proverbDirectory = "/run/telegram-proverb";
inherit (import <niveum/lib>) tmpfilesConfig;
inherit (import ../../lib) tmpfilesConfig;
in {
imports = [
./literature-quote.nix
@@ -22,7 +18,7 @@ in {
./smyth.nix
./nachtischsatan.nix
./tlg-wotd.nix
<niveum/modules/telegram-bot.nix>
./celan.nix
];
systemd.tmpfiles.rules = map (path:
@@ -51,33 +47,45 @@ in {
}
];
age.secrets = {
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;
};
systemd.services.telegram-reverse = {
wantedBy = ["multi-user.target"];
description = "Telegram reverse bot";
path = [pkgs.ffmpeg];
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/reverse.token>;
enable = true;
script = "${telebots}/bin/telegram-reverse";
script = ''
TELEGRAM_BOT_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")" ${telebots}/bin/telegram-reverse
'';
serviceConfig.Restart = "always";
serviceConfig.WorkingDirectory = reverseDirectory;
serviceConfig.LoadCredential = "token:${config.age.secrets.telegram-token-reverse.path}";
};
systemd.services.telegram-betacode = {
wantedBy = ["multi-user.target"];
description = "Telegram beta code bot";
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/betacode.token>;
enable = true;
script = "${telebots}/bin/telegram-betacode";
script = ''
TELEGRAM_BOT_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")" ${telebots}/bin/telegram-betacode
'';
serviceConfig.Restart = "always";
serviceConfig.LoadCredential = "token:${config.age.secrets.telegram-token-betacode.path}";
};
systemd.services.telegram-proverb = {
wantedBy = ["multi-user.target"];
description = "Telegram proverb bot";
environment.TELEGRAM_BOT_TOKEN = lib.strings.fileContents <system-secrets/telegram/proverb.token>;
enable = true;
script = "${telebots}/bin/telegram-proverb";
script = ''
TELEGRAM_BOT_TOKEN="$(cat "$CREDENTIALS_DIRECTORY/token")" ${telebots}/bin/telegram-proverb
'';
serviceConfig.Restart = "always";
serviceConfig.WorkingDirectory = proverbDirectory;
serviceConfig.LoadCredential = "token:${config.age.secrets.telegram-token-proverb.path}";
};
}

View File

@@ -1,14 +1,16 @@
{
pkgs,
config,
inputs,
lib,
...
}: let
hesychius = <scripts> + "/hesychius/hesychius.txt";
hesychius = inputs.scripts.outPath + "/hesychius/hesychius.txt";
in {
niveum.telegramBots.hesychius = {
enable = true;
time = "08:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@HesychiosAlexandreus"];
command = "${pkgs.coreutils}/bin/shuf -n1 ${hesychius}";
};

View File

@@ -1,17 +1,16 @@
{
pkgs,
config,
lib,
niveumPackages,
...
}: let
scripts = import <niveum/packages/scripts> {inherit pkgs lib;};
inherit (scripts) literature-quote;
in {
}: {
niveum.telegramBots.quotebot = {
enable = true;
time = "08/6:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["-1001760262519"];
command = "${literature-quote}/bin/literature-quote";
command = "${niveumPackages.literature-quote}/bin/literature-quote";
parseMode = "Markdown";
};

View File

@@ -1,28 +1,29 @@
{
pkgs,
config,
lib,
...
}: let
nachtischsatan-bot = {token}:
nachtischsatan-bot = {tokenFile}:
pkgs.writers.writePython3 "nachtischsatan-bot" {
libraries = [pkgs.python3Packages.python-telegram-bot];
} ''
from telegram.ext import Updater, MessageHandler
from telegram.ext.filters import Filters
from telegram.ext import Application, ContextTypes, MessageHandler, filters
from telegram import Update
import random
import time
def flubber(update, context):
async def flubber(update: Update, context: ContextTypes.DEFAULT_TYPE):
time.sleep(random.randrange(4000) / 1000)
update.message.reply_text("*flubberflubber*")
await update.message.reply_text("*flubberflubber*")
updater = Updater('${token}')
updater.dispatcher.add_handler(MessageHandler(Filters.all, flubber))
updater.start_polling()
updater.idle()
with open('${tokenFile}', 'r') as tokenFile:
token = tokenFile.read().strip()
application = Application.builder().token(token).build()
application.add_handler(MessageHandler(filters.ALL, flubber))
application.run_polling()
'';
in {
systemd.services.telegram-nachtischsatan = {
@@ -30,11 +31,13 @@ in {
description = "*flubberflubber*";
enable = true;
script = toString (nachtischsatan-bot {
token = lib.strings.fileContents <system-secrets/telegram/nachtischsatan.token>;
tokenFile = config.age.secrets.telegram-token-nachtischsatan.path;
});
serviceConfig.Restart = "always";
};
age.secrets.telegram-token-nachtischsatan.file = ../../secrets/telegram-token-nachtischsatan.age;
niveum.passport.services = [
{
title = "Nachtischsatan-Bot";

View File

@@ -1,12 +1,13 @@
{
config,
pkgs,
lib,
...
}: {
niveum.telegramBots.smyth = {
enable = true;
time = "06/6:00";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
time = "08:00";
tokenFile = config.age.secrets.telegram-token-kmein.path;
chatIds = ["@HerbertWeirSmyth"];
command = toString (pkgs.writers.writeDash "random-smyth" ''
set -efu
@@ -25,7 +26,7 @@
'');
};
systemd.timers.telegram-bot-smyth.timerConfig.RandomizedDelaySec = "3h";
systemd.timers.telegram-bot-smyth.timerConfig.RandomizedDelaySec = "10h";
niveum.passport.services = [
{

View File

@@ -1,18 +1,19 @@
{
pkgs,
lib,
config,
...
}: {
niveum.telegramBots.tlg-wotd = {
enable = true;
time = "9:30";
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
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 | rtrimstr(" "))'\'''\n\nFirst occurrence: \(.firstOccurrence)\nNumber of occurrences: \(.totalOccurrences)"
"*\(.word)* '\'''\(.definition | sub("<.*>"; "") | rtrimstr(" "))'\'''\n\nFirst occurrence: \(.firstOccurrence)\nNumber of occurrences: \(.totalOccurrences)"
'
'');
parseMode = "Markdown";

View File

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

View File

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

View File

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

View File

@@ -1,37 +0,0 @@
{
pkgs,
lib,
...
}: let
inherit (import <niveum/lib>) localAddresses;
living-room-id = 131090;
in {
imports = [<niveum/modules/traadfri.nix>];
environment.systemPackages = [
(pkgs.writers.writeDashBin "traadfri-party" ''
while true; do
for color in $(traadfri colours | shuf); do
echo "$color"
traadfri group "''${2:-${toString living-room-id}}" --on --colour="$color"
sleep "''${1:-2}"
done
done
'')
];
niveum.traadfri = {
enable = true;
user = "kmein";
host = localAddresses.tradfri;
key = lib.strings.fileContents <secrets/traadfri.key>;
rooms = {
corridor = 131080;
kitchen = 131081;
bedroom = 131082;
living-room = living-room-id;
bedside = 131087;
chain = 131089;
};
};
}

View File

@@ -2,18 +2,27 @@
pkgs,
lib,
...
}: {
imports = [<stockholm/krebs/3modules/fetchWallpaper.nix>];
}: let
url = "http://wallpaper.r/realwallpaper-krebs-stars-berlin.png";
stateDir = "~/.cache/wallpaper";
in {
systemd.user.services.wallpaper = {
wantedBy = ["graphical-session.target"];
after = ["network.target"];
script = ''
set -euf
krebs.fetchWallpaper = {
enable = true;
url = "http://prism.r/realwallpaper-krebs-stars-berlin.png";
};
users.users.fetchWallpaper.isSystemUser = true;
services.xserver = {
display = lib.mkForce 0; # needed for fetchWallpaper to find the X display
displayManager.sessionCommands = "${pkgs.xorg.xhost}/bin/xhost +LOCAL:";
mkdir -p ${stateDir}
chmod o+rx ${stateDir}
cd ${stateDir}
(${pkgs.curl}/bin/curl -s -o wallpaper.tmp -z wallpaper.tmp ${lib.escapeShellArg url} && cp wallpaper.tmp wallpaper) || :
${pkgs.feh}/bin/feh --no-fehbg --bg-scale wallpaper
'';
startAt = "*:00,10,20,30,40,50";
serviceConfig = {
Restart = "always";
RestartSec = "15s";
StartLimitBurst = 0;
};
};
}

View File

@@ -7,6 +7,15 @@
# nothing to see here
'';
environment.systemPackages = [pkgs.atuin];
environment.variables.ATUIN_CONFIG_DIR = toString (pkgs.writeTextDir "/config.toml" ''
auto_sync = true
update_check = false
sync_address = "http://zaatar.r:8888"
sync_frequency = 0
style = "compact"
'');
programs.zsh = let
zsh-completions = pkgs.fetchFromGitHub {
owner = "zsh-users";
@@ -14,12 +23,6 @@
rev = "cf565254e26bb7ce03f51889e9a29953b955b1fb";
sha256 = "1yf4rz99acdsiy0y1v3bm65xvs2m0sl92ysz0rnnrlbd5amn283l";
};
zsh-history-substring-search = pkgs.fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-history-substring-search";
rev = "aae3388491c2312c4efb2e86bcb999927bb2900e";
sha256 = "0lgmq1xcccnz5cf7vl0r0qj351hwclx9p80cl0qczxry4r2g5qaz";
};
in {
enable = true;
enableCompletion = true;
@@ -54,12 +57,6 @@
autoload -U zmv run-help
fpath=(${zsh-completions}/src $fpath)
source ${zsh-history-substring-search}/zsh-history-substring-search.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
'';
promptInit = with config.niveum; ''
autoload -Uz vcs_info
@@ -71,9 +68,20 @@
zstyle ':vcs_info:*' formats "%c%u%F{cyan}%b%f"
zstyle ':vcs_info:*' actionformats "(%a) %c%u%F{cyan}%b%f"
# atuin distributed shell history
export ATUIN_NOBIND="true" # disable all keybdinings of atuin
eval "$(atuin init zsh)"
bindkey '^r' _atuin_search_widget # bind ctrl+r to atuin
# use zsh only session history
fc -p
precmd () {
vcs_info
RPROMPT="$vcs_info_msg_0_"
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] || [ -n "$SSH_CONNECTION" ]; then
RPROMPT="$(hostname)"
else
RPROMPT="$vcs_info_msg_0_"
fi
if [[ -n $IN_NIX_SHELL ]]; then
PROMPT='%B%~%b %(?.%F{${promptColours.success}}.%F{${promptColours.failure}})λ%f '
else

702
flake.lock generated
View File

@@ -1,12 +1,132 @@
{
"nodes": {
"flake-utils": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"lastModified": 1690228878,
"narHash": "sha256-9Xe7JV0krp4RJC9W9W9WutZVlw6BlHTFMiUP/k48LQY=",
"owner": "ryantm",
"repo": "agenix",
"rev": "d8c973fd228949736dedf61b7f8cc1ece3236792",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"base16": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1689633990,
"narHash": "sha256-iwvQg2Vx0IIDWZaKo8Xmzxlv1YPHg+Kp/QSv8dRv0RY=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "dddf2e1c04845d43c89a8e9e37d574519649a404",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"blessings": {
"flake": false,
"locked": {
"lastModified": 1549397368,
"narHash": "sha256-YVIGRG+/ey4nFEZl1ZPHj7Hx/Of3rsUGnkLK4V4zZd0=",
"ref": "refs/heads/master",
"rev": "d94712a015636efe7ec79bc0a2eec6739d0be779",
"revCount": 18,
"type": "git",
"url": "https://cgit.krebsco.de/blessings"
},
"original": {
"type": "git",
"url": "https://cgit.krebsco.de/blessings"
}
},
"coptic-dictionary": {
"inputs": {
"kellia-dictionary": "kellia-dictionary",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1691406669,
"narHash": "sha256-8QKnoDfdQuy2ODnCi6NNUv+wewONseGEH1QAvzA7io0=",
"owner": "kmein",
"repo": "coptic-dictionary",
"rev": "7316ef7a4264afa65c96a2e089845c79fa25f19c",
"type": "github"
},
"original": {
"owner": "kmein",
"repo": "coptic-dictionary",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1673295039,
"narHash": "sha256-AsdYgE8/GPwcelGgrntlijMg4t3hLFJFCRF3tL5WVjA=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "87b9d090ad39b25b2400029c64825fc2a8868943",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1692799911,
"narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44",
"type": "github"
},
"original": {
@@ -15,59 +135,92 @@
"type": "github"
}
},
"flake-utils_2": {
"locked": {
"lastModified": 1676283394,
"narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1689549921,
"narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixos-unstable"
],
"utils": "utils"
"nixpkgs"
]
},
"locked": {
"lastModified": 1661573386,
"narHash": "sha256-pBEg8iY00Af/SAtU2dlmOAv+2x7kScaGlFRDjNoVJO8=",
"lastModified": 1692099905,
"narHash": "sha256-/pSusGhmIdSdAaywQRFA5dVbfdIzlWQTecM+E46+cJ0=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d89bdff445eadff03fe414e9c30486bc8166b72b",
"rev": "2a6679aa9cc3872c29ba2a57fe1b71b3e3c5649f",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"ref": "release-23.05",
"repo": "home-manager",
"type": "github"
}
},
"krops": {
"kellia-dictionary": {
"flake": false,
"locked": {
"lastModified": 1660946774,
"narHash": "sha256-7C+vE1hvo9OfonmBVT1as6c8rZeLf8f4nEsELwnUPXc=",
"owner": "KELLIA",
"repo": "dictionary",
"rev": "4fe62847e93b8a87ad7ca5de19190b34ff9e0c99",
"type": "github"
},
"original": {
"owner": "KELLIA",
"repo": "dictionary",
"type": "github"
}
},
"menstruation-backend": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixos-stable"
"nixpkgs"
],
"rust-overlay": [
"rust-overlay"
]
},
"locked": {
"lastModified": 1661273257,
"narHash": "sha256-cywpSH3D291AwdO/ecJxHeN2Vuuz0cIy/NEXMsFT+Og=",
"owner": "kmein",
"repo": "krops",
"rev": "542bc544ec8b0b807933a812d098e601683b0956",
"type": "github"
},
"original": {
"owner": "kmein",
"repo": "krops",
"type": "github"
}
},
"menstruation-backend": {
"flake": false,
"locked": {
"lastModified": 1649545504,
"narHash": "sha256-TVm3246ML7gWPeGm+bdb+Qo8o/7nve7sQ2hBdCZm3z8=",
"lastModified": 1677075142,
"narHash": "sha256-0RXVZcK2YtPckd/3+jb+yLpeXZ6jnQe25w9idztDXi8=",
"owner": "kmein",
"repo": "menstruation.rs",
"rev": "d9f3c6d53542fd7c7ed191e37cf4e342d4a47bcb",
"rev": "e34af4393963cdbadb456b7b9ae2e95e6db7b8a3",
"type": "github"
},
"original": {
@@ -77,13 +230,23 @@
}
},
"menstruation-telegram": {
"flake": false,
"inputs": {
"flake-utils": [
"flake-utils"
],
"menstruation-backend": [
"menstruation-backend"
],
"nixpkgs": [
"nixpkgs-old"
]
},
"locked": {
"lastModified": 1634815642,
"narHash": "sha256-q1OTMx5ayNu9ppHJBDUie/ow+BcA5DXnHEm11EY+C4E=",
"lastModified": 1677075205,
"narHash": "sha256-2+xuAhsS3y2qB0ObVPCHXrmnTsIZ8uI5HFI4+Ash8PY=",
"owner": "kmein",
"repo": "menstruation-telegram",
"rev": "a34555cf46f02157718b0565b5456348fff54181",
"rev": "f7ddb6d9610aacb50ec66a3ce1bdc49fe4664a49",
"type": "github"
},
"original": {
@@ -92,62 +255,248 @@
"type": "github"
}
},
"nix-writers": {
"nix-formatter-pack": {
"inputs": {
"nixpkgs": [
"nix-on-droid",
"nixpkgs"
],
"nmd": "nmd",
"nmt": "nmt"
},
"locked": {
"lastModified": 1666720474,
"narHash": "sha256-iWojjDS1D19zpeZXbBdjWb9MiKmVVFQCqtJmtTXgPx8=",
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"rev": "14876cc8fe94a3d329964ecb073b4c988c7b61f5",
"type": "github"
},
"original": {
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"type": "github"
}
},
"nix-on-droid": {
"inputs": {
"home-manager": [
"home-manager"
],
"nix-formatter-pack": "nix-formatter-pack",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap",
"nmd": "nmd_2"
},
"locked": {
"lastModified": 1688144254,
"narHash": "sha256-8KL1l/7eP2Zm1aJjdVaSOk0W5kTnJo9kcgW03gqWuiI=",
"owner": "t184256",
"repo": "nix-on-droid",
"rev": "2301e01d48c90b60751005317de7a84a51a87eb6",
"type": "github"
},
"original": {
"owner": "t184256",
"ref": "release-23.05",
"repo": "nix-on-droid",
"type": "github"
}
},
"nixinate": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1688141737,
"narHash": "sha256-qHrNMYWukOKmKVf6wXOGKj1xxUnOGjvTRbt/PLLXuBE=",
"owner": "matthewcroughan",
"repo": "nixinate",
"rev": "7902ae845e6cc5bd450e510cdf5e009a6e4a44d9",
"type": "github"
},
"original": {
"owner": "matthewcroughan",
"repo": "nixinate",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1692986144,
"narHash": "sha256-M4VFpy7Av9j+33HF5nIGm0k2+DXXW4qSSKdidIKg5jY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "74e5bdc5478ebbe7ba5849f0d765f92757bb9dbf",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-for-bootstrap": {
"locked": {
"lastModified": 1686921029,
"narHash": "sha256-J1bX9plPCFhTSh6E3TWn9XSxggBh/zDD4xigyaIQBy8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c7ff1b9b95620ce8728c0d7bd501c458e6da9e04",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c7ff1b9b95620ce8728c0d7bd501c458e6da9e04",
"type": "github"
}
},
"nixpkgs-old": {
"locked": {
"lastModified": 1682600000,
"narHash": "sha256-ha4BehR1dh8EnXSoE1m/wyyYVvHI9txjW4w5/oxsW5Y=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "50fc86b75d2744e1ab3837ef74b53f103a9b55a0",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "50fc86b75d2744e1ab3837ef74b53f103a9b55a0",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1693094031,
"narHash": "sha256-PyPWn5/WzryKDKuuiJJ8cd1BJCenhjbaicYQbwRM9Ao=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "38b9aaf6682015f1d2fc7b7f48da96992c30cfa3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1659446231,
"narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "eabc38219184cc3e04a974fe31857d8e0eac098d",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-21.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1615532953,
"narHash": "sha256-SWpaGjrp/INzorEqMz3HLi6Uuk9I0KAn4YS8B4n3q5g=",
"path": "/nix/store/vw365chp87kvfczxm26qiq7z2pq3jk5z-source",
"rev": "916ee862e87ac5ee2439f2fb7856386b4dc906ae",
"type": "path"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nmd": {
"flake": false,
"locked": {
"lastModified": 1554228333,
"narHash": "sha256-hG/PlcCvCQhNcU55NpHfATkyH9k6cZmO7uvBoJjasXU=",
"ref": "refs/heads/master",
"rev": "c528cf970e292790b414b4c1c8c8e9d7e73b2a71",
"revCount": 32,
"type": "git",
"url": "https://cgit.krebsco.de/nix-writers"
"lastModified": 1666190571,
"narHash": "sha256-Z1hc7M9X6L+H83o9vOprijpzhTfOBjd0KmUTnpHAVjA=",
"owner": "rycee",
"repo": "nmd",
"rev": "b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169",
"type": "gitlab"
},
"original": {
"type": "git",
"url": "https://cgit.krebsco.de/nix-writers"
"owner": "rycee",
"repo": "nmd",
"type": "gitlab"
}
},
"nixos-stable": {
"nmd_2": {
"flake": false,
"locked": {
"lastModified": 1661520432,
"narHash": "sha256-9z+WDeXiu3hobvSsL0SbHDx4s+kFmm8eussySuX4zCM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "f11e12ac6af528c1ba12426ce83cee26f21ceafd",
"type": "github"
"lastModified": 1666190571,
"narHash": "sha256-Z1hc7M9X6L+H83o9vOprijpzhTfOBjd0KmUTnpHAVjA=",
"owner": "rycee",
"repo": "nmd",
"rev": "b75d312b4f33bd3294cd8ae5c2ca8c6da2afc169",
"type": "gitlab"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.05",
"repo": "nixpkgs",
"type": "github"
"owner": "rycee",
"repo": "nmd",
"type": "gitlab"
}
},
"nixos-unstable": {
"nmt": {
"flake": false,
"locked": {
"lastModified": 1660305968,
"narHash": "sha256-r0X1pZCSEA6mzt5OuTA7nHuLmvnbkwgpFAh1iLIx4GU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c4a0efdd5a728e20791b8d8d2f26f90ac228ee8d",
"lastModified": 1648075362,
"narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=",
"owner": "rycee",
"repo": "nmt",
"rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae",
"type": "gitlab"
},
"original": {
"owner": "rycee",
"repo": "nmt",
"type": "gitlab"
}
},
"nur": {
"locked": {
"lastModified": 1693082793,
"narHash": "sha256-di/x+vrMYmjSHabbiuPi6EZ0m6HoPXOVtA7ugU3rVZM=",
"owner": "nix-community",
"repo": "NUR",
"rev": "0f81f016eecec153a26099beb25b0c8bac87bd23",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"recht": {
"flake": false,
"inputs": {
"blessings": "blessings",
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1619583518,
"narHash": "sha256-3eFw6xWue9cvPxXq1ROq32ecvPOmqOedgQhyOr7N9iE=",
"lastModified": 1677165419,
"narHash": "sha256-pjYpXg+09rayon6uhSNd30ryrT2zYLOlDLBHQ9pnGZg=",
"owner": "kmein",
"repo": "recht",
"rev": "d551afed23122bb3106e59eb2274394ec5555048",
"rev": "5fa158ce21de797bd95a934dab8d4403b7531d20",
"type": "github"
},
"original": {
@@ -157,49 +506,87 @@
}
},
"retiolum": {
"flake": false,
"locked": {
"lastModified": 1660680907,
"narHash": "sha256-D6XkykgU1BiDAnnFG9NwSqBRKCZAHK+2+Ri2/m9rzo8=",
"owner": "krebs",
"repo": "retiolum",
"rev": "c4d6b07be29b3b9267027ed25792a2cb350459d5",
"type": "github"
"lastModified": 1691992809,
"narHash": "sha256-qUTsMDSV2L5t6Oj+L60n0KQKbvOhak3+d6++h9AZJPg=",
"ref": "refs/heads/master",
"rev": "6216c30551876303dac5373e92690a7f05fd0f6f",
"revCount": 315,
"type": "git",
"url": "https://git.thalheim.io/Mic92/retiolum"
},
"original": {
"owner": "krebs",
"repo": "retiolum",
"type": "github"
"type": "git",
"url": "https://git.thalheim.io/Mic92/retiolum"
}
},
"root": {
"inputs": {
"agenix": "agenix",
"coptic-dictionary": "coptic-dictionary",
"flake-utils": "flake-utils",
"home-manager": "home-manager",
"krops": "krops",
"menstruation-backend": "menstruation-backend",
"menstruation-telegram": "menstruation-telegram",
"nix-writers": "nix-writers",
"nixos-stable": "nixos-stable",
"nixos-unstable": "nixos-unstable",
"nix-on-droid": "nix-on-droid",
"nixinate": "nixinate",
"nixpkgs": "nixpkgs",
"nixpkgs-old": "nixpkgs-old",
"nixpkgs-unstable": "nixpkgs-unstable",
"nur": "nur",
"recht": "recht",
"retiolum": "retiolum",
"rust-overlay": "rust-overlay",
"scripts": "scripts",
"stockholm": "stockholm",
"stylix": "stylix",
"telebots": "telebots",
"tinc-graph": "tinc-graph",
"traadfri": "traadfri",
"tuna": "tuna"
"voidrice": "voidrice",
"wallpaper-generator": "wallpaper-generator",
"wallpapers": "wallpapers"
}
},
"rust-overlay": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1693015707,
"narHash": "sha256-SFr93DYn502sVT9nB5U8/cKg1INyEk/jCeq8tHioz7Y=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "e90223633068a44f0fb62374e0fa360ccc987292",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"scripts": {
"flake": false,
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": [
"rust-overlay"
]
},
"locked": {
"lastModified": 1662493500,
"narHash": "sha256-EdAEKDQ6z7oinqQ28ELE3+taJ106DgmhNJt/rpqHJic=",
"lastModified": 1689276466,
"narHash": "sha256-T+1f2GsTDzfiEasSPntbaSsJvpJxZ78a5g6CL4NyAK0=",
"owner": "kmein",
"repo": "scripts",
"rev": "51c641ac3c1100d80313696663db70c2eb3698dc",
"rev": "55dff522684f342f4e970116ab374ba999539288",
"type": "github"
},
"original": {
@@ -208,30 +595,58 @@
"type": "github"
}
},
"stockholm": {
"flake": false,
"stylix": {
"inputs": {
"base16": "base16",
"flake-compat": "flake-compat",
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1661246925,
"narHash": "sha256-hGNCF4m3SuVogqoipmJzNIKoh03S/SMnO5oMHgfHWjA=",
"ref": "refs/heads/master",
"rev": "d1fa957ed5bf60767c83c96135f9142f6c96ea50",
"revCount": 10749,
"type": "git",
"url": "https://cgit.lassul.us/stockholm"
"lastModified": 1690463825,
"narHash": "sha256-LILKFcKNVxYcYmzCB2+Gswyob5XrPJAF1YBExFR2yak=",
"owner": "danth",
"repo": "stylix",
"rev": "5c829554280f3139ddbfce8561d7430efbf2abfb",
"type": "github"
},
"original": {
"type": "git",
"url": "https://cgit.lassul.us/stockholm"
"owner": "danth",
"ref": "release-23.05",
"repo": "stylix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"telebots": {
"flake": false,
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1623510321,
"narHash": "sha256-MxYNNL81RXZkYLd4IgiNTSo1X80kTuDzsdGNSA0f1y8=",
"lastModified": 1677156381,
"narHash": "sha256-OMhqYJO2bWtL6osTMpQhA4ySUl4gvJTI13m1agipHJ0=",
"owner": "kmein",
"repo": "telebots",
"rev": "22931c9457e092c4e413555dbe61819d77844246",
"rev": "5527e359e8394f2f66067de7f61587eb65055209",
"type": "github"
},
"original": {
@@ -241,13 +656,23 @@
}
},
"tinc-graph": {
"flake": false,
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": [
"rust-overlay"
]
},
"locked": {
"lastModified": 1653080212,
"narHash": "sha256-BcfppAuVNp0hMcrMG/ZxE4juSrdQbJSUIA0eHS1/Wxo=",
"lastModified": 1687504941,
"narHash": "sha256-wnCRcQn8izEHE8MfBpPkLezxAMIg7SVTq8CZsgkar54=",
"owner": "kmein",
"repo": "tinc-graph",
"rev": "ea0ef2e5542684d1d8e34a626cb9295dec33e70d",
"rev": "91a3a85beaaec4ec43ea5a41322c3a5a6e04edc4",
"type": "github"
},
"original": {
@@ -256,50 +681,57 @@
"type": "github"
}
},
"traadfri": {
"voidrice": {
"flake": false,
"locked": {
"lastModified": 1640451803,
"narHash": "sha256-zS/b93uFpPM9basNP7ngmm+YjYV0IUQAmNghetHA6Ss=",
"owner": "kmein",
"repo": "traadfri",
"rev": "cf46bd09cd3263b90a09b0ca979aa705a4c3671c",
"lastModified": 1692950210,
"narHash": "sha256-0RHvrinkg8LEV/aGnT2n9MNOwaf2ke/YAXRIipZiT2w=",
"owner": "Lukesmithxyz",
"repo": "voidrice",
"rev": "86f05abcce1fd270032975775adb40040c746cfe",
"type": "github"
},
"original": {
"owner": "kmein",
"repo": "traadfri",
"owner": "Lukesmithxyz",
"repo": "voidrice",
"type": "github"
}
},
"tuna": {
"flake": false,
"wallpaper-generator": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1627117248,
"narHash": "sha256-OfqbWLblJY4BJlrCpn8EkHoP3baNJSDTbw45SPaX+0Q=",
"owner": "kmein",
"repo": "tuna",
"rev": "1cbed44069a3009738afdafecefe0a05316039a6",
"lastModified": 1615819231,
"narHash": "sha256-vZzc1ViF/3rCm81+x+pyneuOzoWd0przy9ULgwhGSj4=",
"owner": "pinpox",
"repo": "wallpaper-generator",
"rev": "a2223b9b0c51e0eee0d0b23a5e87228e370bdd5c",
"type": "github"
},
"original": {
"owner": "kmein",
"repo": "tuna",
"owner": "pinpox",
"ref": "v1.1",
"repo": "wallpaper-generator",
"type": "github"
}
},
"utils": {
"wallpapers": {
"flake": false,
"locked": {
"lastModified": 1653893745,
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1",
"lastModified": 1589319718,
"narHash": "sha256-2NruGq3z37vY3uAH8S4sLqHvFAGi8gaDJAgEzMIvM/4=",
"owner": "kmein",
"repo": "wallpapers",
"rev": "7c553bc6bd78afa6dbf2824691466bbad0d8e6e9",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"owner": "kmein",
"repo": "wallpapers",
"type": "github"
}
}

558
flake.nix
View File

@@ -2,195 +2,391 @@
description = "niveum: packages, modules, systems";
inputs = {
nixos-stable.url = "github:NixOS/nixpkgs/nixos-22.05";
nixos-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
agenix.url = "github:ryantm/agenix";
coptic-dictionary.url = "github:kmein/coptic-dictionary";
flake-utils.url = "github:numtide/flake-utils";
home-manager = {
url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixos-unstable";
};
krops = {
url = "github:kmein/krops";
inputs.nixpkgs.follows = "nixos-stable";
inputs.flake-utils.follows = "flake-utils";
};
home-manager.url = "github:nix-community/home-manager/release-23.05";
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";
nur.url = "github:nix-community/NUR";
recht.url = "github:kmein/recht";
retiolum.url = "git+https://git.thalheim.io/Mic92/retiolum";
rust-overlay.url = "github:oxalica/rust-overlay";
scripts.url = "github:kmein/scripts";
stylix.url = "github:danth/stylix/release-23.05";
telebots.url = "github:kmein/telebots";
tinc-graph.url = "github:kmein/tinc-graph";
voidrice.url = "github:Lukesmithxyz/voidrice";
wallpaper-generator.url = "github:pinpox/wallpaper-generator/v1.1";
wallpapers.url = "github:kmein/wallpapers";
# legacy
menstruation-backend = {
url = "github:kmein/menstruation.rs";
flake = false;
};
menstruation-telegram = {
url = "github:kmein/menstruation-telegram";
flake = false;
};
nix-writers = {
url = "git+https://cgit.krebsco.de/nix-writers";
flake = false;
};
recht = {
url = "github:kmein/recht";
flake = false;
};
retiolum = {
url = "github:krebs/retiolum";
flake = false;
};
scripts = {
url = "github:kmein/scripts";
flake = false;
};
stockholm = {
url = "git+https://cgit.lassul.us/stockholm";
flake = false;
};
telebots = {
url = "github:kmein/telebots";
flake = false;
};
tinc-graph = {
url = "github:kmein/tinc-graph";
flake = false;
};
traadfri = {
url = "github:kmein/traadfri";
flake = false;
};
tuna = {
url = "github:kmein/tuna";
flake = false;
};
agenix.inputs.home-manager.follows = "home-manager";
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-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";
scripts.inputs.rust-overlay.follows = "rust-overlay";
stylix.inputs.home-manager.follows = "home-manager";
stylix.inputs.nixpkgs.follows = "nixpkgs";
tinc-graph.inputs.flake-utils.follows = "flake-utils";
tinc-graph.inputs.nixpkgs.follows = "nixpkgs";
tinc-graph.inputs.rust-overlay.follows = "rust-overlay";
voidrice.flake = false;
wallpaper-generator.inputs.flake-utils.follows = "flake-utils";
wallpapers.flake = false;
};
outputs = {
outputs = inputs @ {
self,
flake-utils,
nixpkgs,
nixpkgs-unstable,
nur,
home-manager,
krops,
menstruation-backend,
menstruation-telegram,
nix-writers,
nixos-unstable,
nixos-stable,
recht,
nixinate,
agenix,
retiolum,
scripts,
stockholm,
telebots,
tinc-graph,
traadfri,
tuna,
} @ inputs: let
system = "x86_64-linux";
pkgs = nixos-stable.legacyPackages.${system};
home =
if nixos-stable.lib.inPureEvalMode or false
then _: /nonexistent
else import lib/home.nix;
source = {
sources,
unstable,
name,
}:
{
niveum.file = toString ./.;
nixos-config.symlink = "niveum/systems/${name}/configuration.nix";
system-secrets.pass = {
dir = toString (home /.password-store);
name = "systems/${name}";
};
secrets.pass = {
dir = toString (home /.password-store);
name = "shared";
};
nixpkgs.git = {
url = "https://github.com/NixOS/nixpkgs";
ref =
(
if unstable
then inputs.nixos-unstable
else inputs.nixos-stable
)
.rev;
shallow = true;
};
}
// nixos-stable.lib.mapAttrs' (name: value: {
inherit name;
value.git = {
url = let
github = x: "https://github.com/${x}";
in
{
home-manager = github "nix-community/home-manager";
menstruation-backend = github "kmein/menstruation.rs";
menstruation-telegram = github "kmein/menstruation-telegram";
nixos-unstable = github "NixOS/nixpkgs";
nix-writers = "https://cgit.krebsco.de/nix-writers";
recht = github "kmein/recht";
retiolum = github "krebs/retiolum";
stockholm = "https://cgit.lassul.us/stockholm";
scripts = github "kmein/scripts";
telebots = github "kmein/telebots";
tinc-graph = github "kmein/tinc-graph";
traadfri = github "kmein/traadfri";
}
.${name};
ref = value.rev;
shallow = true;
};
}) (nixos-stable.lib.filterAttrs (name: _: builtins.elem name sources) inputs);
deployScriptFor = {
name,
user ? "root",
host,
unstable ? false,
sshPort ? (import ./lib/default.nix).sshPort,
sources,
}:
toString (krops.packages.${system}.writeDeploy "deploy-${name}" {
source = krops.lib.evalSource [(source {inherit sources unstable name;})];
target = "${user}@${host}:${toString sshPort}";
useNixOutputMonitor = true;
});
in {
apps.${system} = let
forSystems = f: builtins.listToAttrs (map f (builtins.attrNames (builtins.readDir ./systems)));
externalNetwork = import ./lib/external-network.nix;
deployScripts = forSystems (name: {
name = "deploy-${name}";
value = {
type = "app";
program = deployScriptFor {
inherit name;
host =
if externalNetwork ? name
then externalNetwork.${name}
else "${name}.r";
unstable = name == "kabsa" || name == "manakish";
sources =
["nix-writers" "nixpkgs" "retiolum" "stockholm"]
++ {
zaatar = ["traadfri"];
ful = [];
tahina = [];
kabsa = ["traadfri" "nixos-unstable" "home-manager" "menstruation-backend" "recht"];
manakish = ["traadfri" "nixos-unstable" "home-manager" "menstruation-backend" "recht"];
makanek = ["nixos-unstable" "menstruation-telegram" "menstruation-backend" "scripts" "telebots" "tinc-graph"];
}
.${name};
flake-utils,
nix-on-droid,
stylix,
...
}:
{
apps =
nixinate.nixinate.x86_64-linux self
// {
x86_64-linux = let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
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 = {
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
'');
};
};
};
});
ciScripts = forSystems (name: {
name = "build-${name}";
value = {
type = "app";
program = import ./ci.nix {inherit name system inputs;};
nixosModules = {
htgen = import modules/htgen.nix;
moodle-dl = import modules/moodle-dl.nix;
networkmanager-declarative = import modules/networkmanager-declarative.nix;
passport = import modules/passport.nix;
panoptikon = import modules/panoptikon.nix;
power-action = import modules/power-action.nix;
system-dependent = import modules/system-dependent.nix;
telegram-bot = import modules/telegram-bot.nix;
};
lib = {
panoptikon = import lib/panoptikon.nix;
};
nixOnDroidConfigurations = {
moto = nix-on-droid.lib.nixOnDroidConfiguration {
modules = [systems/moto/configuration.nix];
pkgs = import nixpkgs {
system = "aarch64-linux";
overlays = [nix-on-droid.overlays.default];
};
extraSpecialArgs = {
niveumPackages = inputs.self.packages.aarch64-linux;
niveumLib = inputs.self.lib;
inherit inputs;
};
home-manager-path = home-manager.outPath;
};
});
in
deployScripts // ciScripts;
};
};
nixosConfigurations = let
niveumSpecialArgs = system: {
unstablePackages = import nixpkgs-unstable {
inherit system;
config.allowUnfreePredicate = pkg:
builtins.elem (nixpkgs-unstable.lib.getName pkg) [
"obsidian"
];
};
niveumPackages = inputs.self.packages.${system};
niveumLib = inputs.self.lib;
inherit inputs;
};
in {
ful = nixpkgs.lib.nixosSystem rec {
system = "aarch64-linux";
specialArgs = niveumSpecialArgs system;
modules = [
{
_module.args.nixinate = {
host = "ful";
sshUser = "root";
buildOn = "remote";
substituteOnTarget = true;
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
];
};
makanek = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
# 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
];
};
tahina = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
systems/tahina/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
tabula = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
systems/tabula/configuration.nix
agenix.nixosModules.default
retiolum.nixosModules.retiolum
];
};
manakish = nixpkgs.lib.nixosSystem rec {
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
stylix.nixosModules.stylix
];
};
kabsa = nixpkgs.lib.nixosSystem rec {
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
stylix.nixosModules.stylix
];
};
};
}
// flake-utils.lib.eachSystem [flake-utils.lib.system.x86_64-linux flake-utils.lib.system.aarch64-linux] (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [
nur.overlay
(self: super: {
mpv = super.mpv.override {scripts = [inputs.self.packages.${system}.mpv-visualizer];};
dmenu = super.writers.writeDashBin "dmenu" ''exec ${pkgs.rofi}/bin/rofi -dmenu "$@"'';
})
];
};
unstablePackages = import nixpkgs-unstable {
inherit system;
};
wrapScript = {
packages ? [],
name,
script,
}:
pkgs.writers.writeDashBin name ''PATH=$PATH:${nixpkgs.lib.makeBinPath (packages ++ [pkgs.findutils pkgs.coreutils pkgs.gnused pkgs.gnugrep])} ${script} "$@"'';
in {
packages = rec {
auc = pkgs.callPackage packages/auc.nix {};
betacode = pkgs.callPackage packages/betacode.nix {};
cheat-sh = pkgs.callPackage packages/cheat-sh.nix {};
closest = pkgs.callPackage packages/closest {};
cyberlocker-tools = pkgs.callPackage packages/cyberlocker-tools.nix {};
default-gateway = pkgs.callPackage packages/default-gateway.nix {};
depp = pkgs.callPackage packages/depp.nix {};
devanagari = pkgs.callPackage packages/devanagari {};
devour = pkgs.callPackage packages/devour.nix {};
dic = pkgs.callPackage packages/dic.nix {};
dirmir = pkgs.callPackage packages/dirmir.nix {};
dmenu-bluetooth = pkgs.callPackage packages/dmenu-bluetooth.nix {};
dmenu-scrot = pkgs.callPackage packages/dmenu-scrot.nix {};
dns-sledgehammer = pkgs.callPackage packages/dns-sledgehammer.nix {};
fkill = pkgs.callPackage packages/fkill.nix {};
fzfmenu = pkgs.callPackage packages/fzfmenu.nix {};
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 {};
hc = pkgs.callPackage packages/hc.nix {};
heuretes = pkgs.callPackage packages/heuretes.nix {};
htgen = pkgs.callPackage packages/htgen.nix {};
image-convert-favicon = pkgs.callPackage packages/image-convert-favicon.nix {};
image-convert-tolino = pkgs.callPackage packages/image-convert-tolino.nix {};
infschmv = pkgs.callPackage packages/infschmv.nix {};
iolanguage = pkgs.callPackage packages/iolanguage.nix {};
ipa = pkgs.writers.writePython3Bin "ipa" {flakeIgnore = ["E501"];} (builtins.readFile packages/ipa.py);
ix = pkgs.callPackage packages/ix.nix {};
jsesh = pkgs.callPackage packages/jsesh.nix {};
k-lock = pkgs.callPackage packages/k-lock.nix {};
kirciuoklis = pkgs.callPackage packages/kirciuoklis.nix {};
klem = pkgs.callPackage packages/klem.nix {};
kpaste = pkgs.callPackage packages/kpaste.nix {};
literature-quote = pkgs.callPackage packages/literature-quote.nix {};
mahlzeit = pkgs.haskellPackages.callPackage packages/mahlzeit.nix {};
man-pandoc = pkgs.callPackage packages/man/pandoc.nix {};
man-pdf = pkgs.callPackage packages/man-pdf.nix {};
mansplain = pkgs.callPackage packages/mansplain.nix {};
manual-sort = pkgs.callPackage packages/manual-sort.nix {};
menu-calc = pkgs.callPackage packages/menu-calc.nix {};
meteo = pkgs.callPackage packages/meteo.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-visualizer = unstablePackages.mpvScripts.visualizer;
new-mac = pkgs.callPackage packages/new-mac.nix {};
nix-git = pkgs.callPackage packages/nix-git.nix {};
nix-index-update = pkgs.callPackage packages/nix-index-update.nix {inherit system;};
notemenu = pkgs.callPackage packages/notemenu.nix {niveumPackages = self.packages.${system};};
opustags = pkgs.callPackage packages/opustags.nix {};
pls = pkgs.callPackage packages/pls.nix {};
qrpaste = pkgs.callPackage packages/qrpaste.nix {};
rfc = pkgs.callPackage packages/rfc.nix {};
scanned = pkgs.callPackage packages/scanned.nix {};
swallow = pkgs.callPackage packages/swallow.nix {};
text2pdf = pkgs.callPackage packages/text2pdf.nix {};
timer = pkgs.callPackage packages/timer.nix {};
tocharian-font = pkgs.callPackage packages/tocharian-font.nix {};
trans = pkgs.callPackage packages/trans.nix {};
ttspaste = pkgs.callPackage packages/ttspaste.nix {};
unicodmenu = pkgs.callPackage packages/unicodmenu.nix {};
untilport = pkgs.callPackage packages/untilport.nix {};
vg = pkgs.callPackage packages/vg.nix {};
vim = pkgs.callPackage packages/vim.nix {niveumPackages = self.packages.${system};};
obsidian-vim = pkgs.callPackage packages/obsidian-vim.nix {};
vimPlugins-cheat-sh-vim = pkgs.callPackage packages/vimPlugins/cheat-sh.nix {};
vimPlugins-icalendar-vim = pkgs.callPackage packages/vimPlugins/icalendar-vim.nix {};
vimPlugins-jq-vim = pkgs.callPackage packages/vimPlugins/jq-vim.nix {};
vimPlugins-typst-vim = pkgs.callPackage packages/vimPlugins/typst-vim.nix {};
vimPlugins-vim-256noir = pkgs.callPackage packages/vimPlugins/vim-256noir.nix {};
vimPlugins-vim-colors-paramount = pkgs.callPackage packages/vimPlugins/vim-colors-paramount.nix {};
vimPlugins-vim-fetch = pkgs.callPackage packages/vimPlugins/vim-fetch.nix {};
vimPlugins-vim-fsharp = pkgs.callPackage packages/vimPlugins/vim-fsharp.nix {};
vimPlugins-vim-mail = pkgs.callPackage packages/vimPlugins/vim-mail.nix {};
vimPlugins-vim-reason-plus = pkgs.callPackage packages/vimPlugins/vim-reason-plus.nix {};
vimv = pkgs.callPackage packages/vimv.nix {};
weechat-declarative = pkgs.callPackage packages/weechat-declarative.nix {};
weechatScripts-hotlist2extern = pkgs.callPackage packages/weechatScripts/hotlist2extern.nix {};
wttr = pkgs.callPackage packages/wttr.nix {};
itl = pkgs.callPackage packages/itl.nix {};
itools = pkgs.callPackage packages/itools.nix {itl = itl;};
booksplit = wrapScript {
script = inputs.voidrice.outPath + "/.local/bin/booksplit";
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" "")];
};
tag = wrapScript {
script = inputs.voidrice.outPath + "/.local/bin/tag";
name = "tag";
packages = [pkgs.ffmpeg];
};
};
});
}

View File

@@ -1,37 +0,0 @@
rec {
black = {
bright = "#151515";
dark = "#000000";
};
red = {
bright = "#de575c";
dark = "#de575c";
};
yellow = {
bright = "#ebe971";
dark = "#ebe971";
};
green = {
bright = "#00b853";
dark = "#00b853";
};
blue = {
bright = "#90d0f0";
dark = "#7fc6f0";
};
magenta = {
bright = "#cf9ffa";
dark = "#cf9ffa";
};
cyan = {
bright = "#4ae5e8";
dark = "#4ae5e8";
};
white = {
bright = "#ffffff";
dark = "#bbbbbb";
};
background = black.dark;
foreground = white.dark;
cursor = green.bright;
}

View File

@@ -1,37 +0,0 @@
{
black = {
bright = "#444444";
dark = "#1c1c1c";
};
red = {
bright = "#ff8700";
dark = "#af5f5f";
};
green = {
bright = "#87af87";
dark = "#5f875f";
};
yellow = {
bright = "#ffffaf";
dark = "#87875f";
};
blue = {
bright = "#8fafd7";
dark = "#5f87af";
};
magenta = {
bright = "#8787af";
dark = "#5f5f87";
};
cyan = {
bright = "#5fafaf";
dark = "#5f8787";
};
white = {
bright = "#999999";
dark = "#6c6c6c";
};
background = "#262626";
foreground = "#bcbcbc";
cursor = "#bcbcbc";
}

View File

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

View File

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

View File

@@ -1,37 +0,0 @@
rec {
black = {
bright = "#454545";
dark = "#222222";
};
red = {
bright = "#FA8072";
dark = "#B22222";
};
green = {
bright = "#779A3E";
dark = "#556B2F";
};
yellow = {
bright = "#DAA520";
dark = "#B8860B";
};
blue = {
bright = "#6495ED";
dark = "#4682B4";
};
magenta = {
bright = "#DA70D6";
dark = "#9932CC";
};
cyan = {
bright = "#B0E0E6";
dark = "#87CEEB";
};
white = {
bright = "#FFFFFF";
dark = "#C0C0C0";
};
background = "#000000";
foreground = "#AAAAAA";
cursor = green.bright;
}

View File

@@ -1,37 +0,0 @@
rec {
black = {
bright = "#888888";
dark = "#222222";
};
red = {
bright = "#ef8383";
dark = "#f01818";
};
yellow = {
bright = "#efe28b";
dark = "#f8d824";
};
green = {
bright = "#23d830";
dark = "#7ed684";
};
blue = {
bright = "#b3bfef";
dark = "#7890f0";
};
magenta = {
bright = "#efb3e3";
dark = "#f078d8";
};
cyan = {
bright = "#9ce2e2";
dark = "#54e4e4";
};
white = {
bright = "#ffffff";
dark = "#a5a5a5";
};
background = "#000000";
foreground = "#bbbbbb";
cursor = green.bright;
}

View File

@@ -1,37 +0,0 @@
rec {
black = {
bright = "#818383";
dark = "#000000";
};
red = {
bright = "#fc391f";
dark = "#c23621";
};
yellow = {
bright = "#eaec23";
dark = "#adad27";
};
green = {
bright = "#31e722";
dark = "#25bc24";
};
blue = {
bright = "#5833ff";
dark = "#492ee1";
};
magenta = {
bright = "#f935f8";
dark = "#d338d3";
};
cyan = {
bright = "#14f0f0";
dark = "#33bbc8";
};
white = {
bright = "#e9ebeb";
dark = "#cbcccd";
};
background = black.dark;
foreground = white.dark;
cursor = green.bright;
}

View File

@@ -1,37 +0,0 @@
rec {
black = {
bright = "#4b4b4b";
dark = "#242424";
};
red = {
bright = "#fc1c18";
dark = "#d71c15";
};
green = {
bright = "#6bc219";
dark = "#5aa513";
};
yellow = {
bright = "#fec80e";
dark = "#fdb40c";
};
blue = {
bright = "#0955ff";
dark = "#063b8c";
};
magenta = {
bright = "#fb0050";
dark = "#e40038";
};
cyan = {
bright = "#3ea8fc";
dark = "#2595e1";
};
white = {
bright = "#8c00ec";
dark = "#efefef";
};
background = "#181818";
foreground = white.dark;
cursor = "#bbbbbb";
}

View File

@@ -1,37 +0,0 @@
rec {
black = {
bright = "#282c34";
dark = "#282c34";
};
red = {
bright = "#e06c75";
dark = "#e06c75";
};
green = {
bright = "#98c379";
dark = "#98c379";
};
yellow = {
bright = "#e5c07b";
dark = "#e5c07b";
};
blue = {
bright = "#61afef";
dark = "#61afef";
};
magenta = {
bright = "#c678dd";
dark = "#c678dd";
};
cyan = {
bright = "#56b6c2";
dark = "#56b6c2";
};
white = {
bright = "#dcdfe4";
dark = "#dcdfe4";
};
background = black.dark;
foreground = white.bright;
cursor = "#a3b3cc";
}

View File

@@ -1,37 +0,0 @@
rec {
black = {
dark = "#073642";
bright = "#002b36";
};
red = {
dark = "#dc322f";
bright = "#cb4b16";
};
yellow = {
dark = "#b58900";
bright = "#657b83";
};
green = {
dark = "#859900";
bright = "#586e75";
};
blue = {
dark = "#268bd2";
bright = "#839496";
};
magenta = {
dark = "#d33682";
bright = "#6c71c4";
};
cyan = {
dark = "#2aa198";
bright = "#93a1a1";
};
white = {
dark = "#eee8d5";
bright = "#fdf6e3";
};
background = black.bright;
foreground = blue.bright;
cursor = cyan.bright;
}

View File

@@ -1,37 +0,0 @@
rec {
black = {
dark = "#073642";
bright = "#002b36";
};
red = {
dark = "#dc322f";
bright = "#cb4b16";
};
yellow = {
dark = "#b58900";
bright = "#657b83";
};
green = {
dark = "#859900";
bright = "#586e75";
};
blue = {
dark = "#268bd2";
bright = "#839496";
};
magenta = {
dark = "#d33682";
bright = "#6c71c4";
};
cyan = {
dark = "#2aa198";
bright = "#93a1a1";
};
white = {
dark = "#eee8d5";
bright = "#fdf6e3";
};
background = white.bright;
foreground = yellow.bright;
cursor = green.bright;
}

View File

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

View File

@@ -1,4 +1,4 @@
rec {
{
tmpfilesConfig = {
type,
path,
@@ -40,16 +40,14 @@ rec {
sshPort = 22022;
colours = import ./colours/ibm-3270.nix;
theme = pkgs: {
gtk = {
name = "Adwaita-dark";
package = pkgs.gnome3.gnome-themes-extra;
package = pkgs.gnome.gnome-themes-extra;
};
icon = {
name = "Adwaita";
package = pkgs.gnome3.adwaita-icon-theme;
package = pkgs.gnome.adwaita-icon-theme;
};
cursor = {
name = "capitaine-cursors-white";
@@ -72,7 +70,7 @@ rec {
sshKeys = pkgs:
pkgs.lib.strings.splitString "\n" (pkgs.lib.strings.fileContents (pkgs.fetchurl {
url = "https://github.com/kmein.keys";
sha256 = "09c6ny0rmpid1m0pc1wsmb3wyy9g721lf4kv55i4lrp42b3i2d5b";
hash = "sha256-TvvPwplrH9cw7NE4GKqbE5ga+oBHM+TkjxYQ3b1fpLI=";
}));
};

View File

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

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