Compare commits

...

218 Commits

Author SHA1 Message Date
chn
d5803a66c1 devices.pc: add specialisation for nvidia graphic card 2024-02-16 09:53:58 +08:00
chn
536a96ce5e hardware.gpu: fix 2024-02-16 09:44:14 +08:00
chn
a94d6e3d21 devices.pc: switch to amd+nvidia 2024-02-15 23:20:56 +08:00
chn
0e09b925c2 hardware.gpu: rewrite 2024-02-15 23:17:20 +08:00
chn
9d1fae10d8 hardware: update nvidia driver 2024-02-15 20:28:51 +08:00
chn
ef1caae121 hardware: use default nvidia driver 2024-02-15 19:55:41 +08:00
chn
6d70eecc19 system.kernel: fix for surface 2024-02-15 19:38:33 +08:00
chn
1e42238723 system.kernel: update to 6.7 2024-02-15 19:38:17 +08:00
chn
fe089060ae Revert "add todo"
This reverts commit 54bfa1c8ac.
2024-02-15 16:54:57 +08:00
chn
8a5bb908c7 devices.nas: disable snapper 2024-02-15 16:17:16 +08:00
chn
54bfa1c8ac add todo 2024-02-15 16:16:40 +08:00
chn
54493a2ec6 users.chn.plasma: fix kwin shortcuts 2024-02-15 15:53:57 +08:00
chn
f1218571c5 fix build 2024-02-15 15:40:21 +08:00
chn
aecc530aa9 packages.firefox: fix cascade UI 2024-02-15 15:28:21 +08:00
chn
c43187a15c fix build 2024-02-15 15:27:39 +08:00
chn
86a781b327 packages.firefox: add grammarly 2024-02-12 18:39:05 +08:00
chn
0424d7eed7 users.chn.plasma.wallpaper: fix 2024-02-12 18:23:11 +08:00
chn
78a74a5aef users.chn.plasma.shortcuts: add shortcut for system monitor 2024-02-12 14:16:24 +08:00
chn
a4c04c9de2 devices.nas: use desktop-fat package set 2024-02-12 14:12:15 +08:00
chn
aad44c7edd users.chn.plasma.autostart: fix 2024-02-12 13:40:40 +08:00
chn
2a7e8d78be Revert "vps7: disable gui"
This reverts commit bffed3b584.
2024-02-12 13:39:37 +08:00
chn
8b90c0bc22 Revert "nas: disable gui"
This reverts commit 08df40f3a3.
2024-02-12 13:39:26 +08:00
chn
6f533e73ee packages.desktop: enable yubikey-touch-detector 2024-02-12 13:36:55 +08:00
chn
244b0e17fa users.chn.plasma.autostart: fix 2024-02-12 11:59:42 +08:00
chn
7f165fccf4 users.chn.plasma.autostart: add kmail and discord 2024-02-12 11:27:48 +08:00
chn
40f4d35b62 users.chn.plasma.autostart: add element 2024-02-12 11:09:26 +08:00
chn
02981d242f users.chn.plasma.autostart: init 2024-02-12 10:17:28 +08:00
chn
6a36fe0539 users.chn.plasma: split config 2024-02-12 10:04:56 +08:00
chn
45e5569d55 packages.firefox: force write profile.ini 2024-02-12 09:19:09 +08:00
chn
a9027c6127 Merge branch 'firefox' into production 2024-02-12 08:28:37 +08:00
chn
67079b0885 packages.firefox: add dualsub, pakkujs, rsspreview 2024-02-12 08:28:17 +08:00
chn
3384026e91 users.chn.plasma: use tela icon 2024-02-12 00:05:58 +08:00
chn
803b20ec96 users.chn.plasma: switch back to black background 2024-02-11 23:47:56 +08:00
chn
074f88d231 users.chn.konsole: fix opacity 2024-02-11 23:22:10 +08:00
chn
fd7fe508f5 localPackages.blurred-wallpaper: fix 2024-02-11 22:57:59 +08:00
chn
cf6a66f11e users.chn.plasma: fix 2024-02-11 22:45:59 +08:00
chn
c4c2e680a4 packages.firefox: do not use catppuccin 2024-02-11 22:23:02 +08:00
chn
bf16cc5593 packages.desktop.firefox: use catppucin color 2024-02-11 22:08:43 +08:00
chn
5d473887a3 Merge branch 'production' into firefox 2024-02-11 21:56:44 +08:00
chn
773b2e8cc1 users.chn.plasma: add impermanence 2024-02-11 21:53:12 +08:00
chn
c9cfbb515b users.chn.plasma: add yakuake and konsole 2024-02-11 21:41:43 +08:00
chn
82e2cd4e7d system.impermanence: do not persist fontconfig 2024-02-11 17:27:15 +08:00
chn
794657d0ea packages.desktop.firefox: add firefox-color 2024-02-11 17:26:24 +08:00
chn
4f621ce7f1 fix wallpaper 2024-02-11 17:17:24 +08:00
chn
4ebff80941 services.fontconfig: force set font config 2024-02-11 16:59:43 +08:00
chn
6080de15ca users.chn.wallpaper: use blurred-wallpaper package 2024-02-11 16:45:51 +08:00
chn
2310289c92 packages.desktop.firefox: enable language packs 2024-02-11 11:59:31 +08:00
chn
ef30e0f6dc packages.desktop.firefox: force set search engine 2024-02-11 11:32:22 +08:00
chn
e26e287603 packages.default.firefox: add zotero-connector 2024-02-11 11:26:42 +08:00
chn
f9227c3e85 packages.desktop.firefox: add some settings 2024-02-11 09:55:40 +08:00
chn
264be067ca packages.desktop.firefox: add user chrome 2024-02-10 11:21:49 +08:00
chn
047619ee17 packages.desktop.firefox: init 2024-02-10 10:53:57 +08:00
chn
fc6cbc6230 do not set wallpaper 2024-02-09 21:48:12 +08:00
chn
056f38dbf5 devices.pc: fix xcalib startup script 2024-02-09 21:32:12 +08:00
chn
61d7db84ba direct add wallpaper to flake 2024-02-09 21:24:20 +08:00
chn
6672ea7f4f plasma-manager: init 2024-02-09 17:05:34 +08:00
chn
4aead6cfc6 fix build 2024-02-09 12:38:12 +08:00
chn
139722dfdf fix waydroid 2024-02-09 12:12:58 +08:00
chn
ac85049d0f fix zip 2024-02-08 23:01:08 +08:00
chn
f5f71bee21 localPackages.win11os-kde: init 2024-02-05 18:18:10 +08:00
chn
08af6615af update plasma-manager 2024-02-05 11:45:56 +08:00
chn
a07800192d system.gurb: fix efishell 2024-02-04 11:37:36 +08:00
chn
13b0c77e7a do not archive 2024-02-04 11:13:34 +08:00
chn
43e8215fc6 Merge branch 'main' into production 2024-02-03 20:52:43 +08:00
chn
abdf3f5f0b vps7: disable mastodon 2024-02-03 20:52:16 +08:00
chn
9b41ebd154 Revert "services.mastodon: security update to 4.2.5"
This reverts commit 3a60acebb5.
2024-02-03 20:51:55 +08:00
chn
21e8b5300a switch to production 2024-02-03 20:49:59 +08:00
chn
6967ab4839 Revert "switch to production build"
This reverts commit 2fe4fb2a25.
2024-02-03 20:45:25 +08:00
chn
3a60acebb5 services.mastodon: security update to 4.2.5 2024-02-03 20:39:47 +08:00
chn
26f0b20684 fix build for silvermont 2024-02-03 19:21:34 +08:00
chn
2fe4fb2a25 switch to production build 2024-02-03 19:14:42 +08:00
chn
641fd3bb97 fix vps7 build 2024-02-03 10:56:07 +08:00
chn
d37e47ff40 system.grub: fix efi shell 2024-02-02 23:39:12 +08:00
chn
67d3cac7a1 packages.server: add dmidecode 2024-02-01 14:32:23 +08:00
chn
3ffdf466bb system.grub: add efi shell 2024-02-01 13:56:09 +08:00
chn
c89af3fa52 system.grub: rewrite 2024-02-01 12:30:01 +08:00
chn
817613ea96 system.envfs: fix 2024-02-01 11:09:11 +08:00
chn
236ddddffc rewrite system.nix 2024-02-01 10:55:47 +08:00
chn
c08fd457cb system.nix: keepOutputs -> includeBuildDependencies 2024-02-01 10:43:54 +08:00
chn
a577616756 system.nix: autoOptimiseStore = false by default 2024-02-01 10:39:27 +08:00
chn
9e43844e14 system.impermanence: enable by default 2024-02-01 10:05:02 +08:00
chn
81521bcd3b system: add envfs 2024-02-01 10:03:15 +08:00
chn
e2674908fb packages.desktop: fix xclip 2024-02-01 09:56:30 +08:00
chn
7d43e6218d localPackages: fix mirism 2024-02-01 09:30:37 +08:00
chn
41552e2ea1 pc: envfs use upstream 2024-02-01 00:30:11 +08:00
chn
268c5bdf3a pc: enable envfs 2024-02-01 00:05:04 +08:00
chn
500d4ac79e 整理了一些plasma的配置 2024-01-31 22:49:30 +08:00
chn
d0603c5977 fix surface build 2024-01-31 22:05:18 +08:00
chn
a5fdf1ea1d pc: do not include build dependencies 2024-01-31 21:14:21 +08:00
chn
8774a6759a packages.workstation: add yuzu 2024-01-31 15:21:22 +08:00
chn
d354b555eb Revert "pc: enable envfs"
This reverts commit 3a96911336.
2024-01-30 20:21:35 +08:00
chn
3a96911336 pc: enable envfs 2024-01-30 19:34:10 +08:00
chn
08df40f3a3 nas: disable gui 2024-01-30 19:22:25 +08:00
chn
bffed3b584 vps7: disable gui 2024-01-30 19:21:36 +08:00
chn
c29eb53ee0 Revert "Revert "pc: include all build dependencies""
This reverts commit fbc6d5bee1.
2024-01-30 13:34:54 +08:00
chn
42119af04d fix pc build 2024-01-30 11:46:06 +08:00
chn
9d5772ab1f Merge branch 'main' into next 2024-01-30 11:41:04 +08:00
chn
fbc6d5bee1 Revert "pc: include all build dependencies"
This reverts commit 9f9e58e54e.
2024-01-29 21:34:40 +08:00
chn
9f9e58e54e pc: include all build dependencies 2024-01-29 18:45:48 +08:00
chn
dc297d0d04 pc: enable snapper 2024-01-29 14:48:58 +08:00
chn
b59dc1b213 services.xray: do not bypass nvidia 2024-01-29 11:07:05 +08:00
chn
853aaf8183 system.nix: set max-jobs & max-substitution-jobs 2024-01-28 19:02:34 +08:00
chn
795acc3828 system.nix: limit max-substitution-jobs 2024-01-27 18:38:28 +08:00
chn
7cf371e78c system.grub: enable memtest86 2024-01-27 18:36:51 +08:00
chn
39fde66754 pc: enable beesd 2024-01-26 16:00:12 +08:00
chn
7a881491bd pc: do not autoOptimiseStore 2024-01-26 15:56:49 +08:00
chn
8e7c615b02 pc: disable beesd and snapper 2024-01-24 08:59:54 +08:00
chn
dbc6874ead update everything 2024-01-23 15:31:49 +08:00
chn
1a2f725a8e localPackages: zpp-bits use flake inputs 2024-01-22 21:11:00 +08:00
chn
0665f57988 pc: setup color profile 2024-01-22 10:54:31 +08:00
chn
15a9f0c05e packages.desktop: add xcalib 2024-01-22 10:50:36 +08:00
chn
82d834e93a pc: add color profiles 2024-01-22 00:52:49 +08:00
chn
c4cccacba3 packages.desktop: add argyllcms 2024-01-22 00:30:53 +08:00
chn
753709d494 pc: disable colord 2024-01-22 00:28:13 +08:00
chn
173d83daae localPackage.rsshub: use flake inputs 2024-01-21 23:45:43 +08:00
chn
cbe228c873 surface: enable waydroid 2024-01-21 18:14:11 +08:00
chn
eb2ab49388 packages: move some package from workstation to desktop-fat 2024-01-20 11:42:41 +08:00
chn
3fd0988582 surface: add maliit 2024-01-20 11:36:26 +08:00
chn
de3b40360b surface: enable iptsd 2024-01-20 11:10:27 +08:00
chn
bb9a1bfb68 Revert "surface: remove patch from nixos-hardware"
This reverts commit 9d8442b1cf.
2024-01-20 11:10:13 +08:00
chn
9d8442b1cf surface: remove patch from nixos-hardware 2024-01-20 10:04:00 +08:00
chn
26150244cb update aagl 2024-01-19 23:50:47 +08:00
chn
914eea92b6 services.wireguard: fix 2024-01-19 19:45:56 +08:00
chn
b2532ef44d services.xray: rename 2024-01-19 19:08:28 +08:00
chn
b600c81aa7 system.nix: comma use upstream nixpkgs-unstable 2024-01-19 10:39:08 +08:00
chn
01a5c290bc surface: enable swap 2024-01-18 22:38:29 +08:00
chn
16c9fa7c3d surface: disable iptsd 2024-01-18 22:12:28 +08:00
chn
9bf3faee63 system.gui: fix 2024-01-18 21:40:51 +08:00
chn
e1789991c4 allow deploy to surface 2024-01-18 21:38:11 +08:00
chn
3cbfe14cc2 system.gui: use wayland as default 2024-01-18 21:20:56 +08:00
chn
2df6396b84 localPackages.typora: update 2024-01-18 15:11:17 +08:00
chn
ce44fe7856 localPackages.misskey: use flake input 2024-01-18 14:45:50 +08:00
chn
de292de159 system: less log 2024-01-18 11:39:09 +08:00
chn
81b6831e1b do not blacklist module ideapad_laptop 2024-01-18 10:18:01 +08:00
chn
bd445d5034 surface: adjust 2024-01-17 16:22:07 +08:00
chn
0ca6df2499 nixos-hardware use upstream repo 2024-01-17 15:10:03 +08:00
chn
00d010a910 surface: fix kernel 2024-01-17 15:07:42 +08:00
chn
48f450bfe3 surface: add lantian patch 2024-01-17 14:31:09 +08:00
chn
7e4fe4837f surface: fix kernel 2024-01-17 14:27:55 +08:00
chn
13edf20710 use nixos-hardware from CHN-beta 2024-01-17 14:07:22 +08:00
chn
556a8d68fc surface: add config from nixos-hardware 2024-01-17 13:21:43 +08:00
chn
2e9972a8cd pc: enable waydroid 2024-01-17 12:16:03 +08:00
chn
30397a8443 pc: fix nvidia 2024-01-17 11:36:24 +08:00
chn
1fcecbb74d pc: disable waydroid 2024-01-17 09:38:55 +08:00
chn
d80d009e3a pc: enable virtualbox 2024-01-16 23:33:30 +08:00
chn
a9e0a57791 Revert "pc: enable anbox"
This reverts commit 17430b943e.
2024-01-16 23:15:57 +08:00
chn
17430b943e pc: enable anbox 2024-01-16 23:12:11 +08:00
chn
7e8bd6f959 pc: enable colord 2024-01-16 22:45:18 +08:00
chn
a624e98514 split machine config 2024-01-16 22:41:03 +08:00
chn
67a03b5ccc default use x11 2024-01-16 22:07:15 +08:00
chn
f64390d7a7 pc: switch back to nvidia 2024-01-16 22:00:21 +08:00
chn
d0158b1608 pc: prime use offload 2024-01-16 21:33:49 +08:00
chn
36da74115e try to fix amdgpu (failed) 2024-01-16 21:32:29 +08:00
chn
fd13dd7319 try to fix 2024-01-16 20:14:41 +08:00
chn
0e75a6f4e8 update kernel 2024-01-16 16:40:41 +08:00
chn
ccc102ea00 fix chromium 2024-01-16 01:18:22 +08:00
chn
4465522bc5 hardware: disable nvidia modesetting 2024-01-16 00:47:48 +08:00
chn
8ba5913eca surface: fix opencolorio 2024-01-16 00:14:14 +08:00
chn
478d760816 comment 2024-01-15 19:39:10 +08:00
chn
98f9bfd1e5 pc: use prime 2024-01-15 18:59:26 +08:00
chn
2d1df77bc3 vps6: xray reset uuid 2024-01-15 10:27:37 +08:00
chn
dc19b577dc comment 2024-01-14 22:37:44 +08:00
chn
49898a9d01 fix scipy 2024-01-14 22:32:57 +08:00
chn
c35664984e plasma-manager: prepare 2024-01-14 22:06:00 +08:00
chn
aec8ef7c35 add some comment 2024-01-14 20:29:46 +08:00
chn
8931b90a33 some adjust 2024-01-14 19:56:55 +08:00
chn
2b2883ab48 hardware: use production nvidia driver 2024-01-14 18:52:05 +08:00
chn
410f73e8b1 pc: try to fix backlight 2024-01-14 17:36:36 +08:00
chn
8ef28b9de5 hardware.legion: init 2024-01-14 14:55:39 +08:00
chn
c8e0c74535 hardware: fix nvidia modesetting 2024-01-14 12:42:30 +08:00
chn
d5a3a6b05a fix afdko 2024-01-14 12:42:19 +08:00
chn
00901f5cb5 packages.workstation: remove quantum-espresso 2024-01-14 12:21:27 +08:00
chn
c83505da53 pc: switch to znver4 2024-01-13 22:29:51 +08:00
chn
30c18790f9 fix numpy pandas eventlet 2024-01-12 12:24:24 +08:00
chn
216117a30a yoga->surface 2024-01-11 21:28:06 +08:00
chn
c4af4de4ea packages.workstation: update wemeet 2024-01-10 20:04:22 +08:00
chn
daa824943f services.mirism: fix 2024-01-09 11:37:36 +08:00
chn
bcd64f2fe7 packages.desktop.vscode: add vasp support 2024-01-08 19:47:40 +08:00
chn
259dfd53f3 services.mirism: restart every day 2024-01-07 20:49:55 +08:00
chn
1a463ee716 add znver4 support 2024-01-06 14:10:12 +08:00
chn
78a0a55bed localPackages: update misskey 2024-01-06 13:06:36 +08:00
chn
2a465b55ec modules.system: fstrim set to weekly (default) 2024-01-05 12:41:58 +08:00
chn
ea3f4bb00c modules.system: remove versionSuffix 2024-01-05 12:26:40 +08:00
chn
bbf601f5a8 modules.packages.desktop-fat.steam: replace chinese comment 2024-01-04 22:32:54 +08:00
chn
8543130661 packages.desktop: add firefoxpwa 2024-01-03 23:01:04 +08:00
chn
aa93dd53b6 packages.server.ssh: prefer askPassword 2024-01-03 22:43:28 +08:00
chn
0031080837 system.kernel: enable preempt as default 2024-01-02 22:21:05 +08:00
chn
d3f38c3b55 packages.server: enable gpg 2023-12-31 10:46:57 +08:00
chn
0c49c71899 services.nginx.applications.main: fix 2023-12-29 20:22:21 +08:00
chn
b0e543d324 packages.server.ssh: enable ssh agent forward 2023-12-29 20:22:02 +08:00
chn
51c8a516ff packages.server: remove gnupg agent 2023-12-29 15:33:06 +08:00
chn
f3c8017959 Revert "try to enable codex"
This reverts commit 3867469fc5.
2023-12-28 21:04:45 +08:00
chn
3867469fc5 try to enable codex 2023-12-28 21:03:38 +08:00
chn
f23f7101e4 update zsh-lsd 2023-12-28 12:55:18 +08:00
chn
8eea6ffdc3 packages.server.zsh: remove zsh-nix-shell 2023-12-28 12:29:35 +08:00
chn
729df7ab63 update misskey 2023-12-28 11:05:52 +08:00
chn
c1737fcb08 packages.server.ssh: set askPassword to systemd-ask-password 2023-12-27 17:42:53 +08:00
chn
50862f0e33 users.chn: add forwardAgent 2023-12-27 17:18:04 +08:00
chn
5b30aebfae services.frpClient: stcp allow all users 2023-12-27 15:11:15 +08:00
chn
f5e82ee889 localPackages.misskey: use nodejs 21 2023-12-25 20:50:42 +08:00
chn
a6241a201a try to fix pc power bug 2023-12-25 20:50:15 +08:00
chn
db3571b8e5 revert nodejs update 2023-12-25 20:46:27 +08:00
chn
bd6a867ab3 localPackages.misskey: use nodejs 20 2023-12-24 22:46:33 +08:00
chn
045de2b18e update nodejs 2023-12-24 22:45:26 +08:00
chn
501df43b0c services.misskey: increase statement_timeout 2023-12-24 14:58:20 +08:00
chn
fee1f32a0a localPackages.misskey: remove re2 2023-12-24 14:40:27 +08:00
chn
71c4426e53 Merge branch 'misskey' 2023-12-24 09:22:30 +08:00
chn
7cd03dd163 packages.server: add hexo-cli 2023-12-23 22:43:39 +08:00
chn
4941582aec update misskey 2023-12-23 22:42:04 +08:00
chn
29fef229d8 Revert "system: try to fix ipv6"
This reverts commit 303d67ca06.
2023-12-23 15:31:44 +08:00
chn
303d67ca06 system: try to fix ipv6 2023-12-23 10:03:09 +08:00
chn
3732d19de0 packages.server.ssh: auto cd in jykang 2023-12-22 11:39:10 +08:00
chn
26eec4d375 packages.server: split zsh 2023-12-22 11:38:56 +08:00
chn
ac362289de services.synapse: fix 2023-12-20 16:20:23 +08:00
chn
3bb5e840e7 services.synapse: fix 2023-12-20 15:26:35 +08:00
chn
8b3ef05d3b services.nginx.applications.main: fix alias 2023-12-20 15:14:51 +08:00
chn
0fd63c01f7 services.synapse: fix 2023-12-20 14:39:23 +08:00
chn
61c644a4b1 services.synapse: enable sliding sync 2023-12-20 14:33:14 +08:00
89 changed files with 2975 additions and 2288 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
*.png filter=lfs diff=lfs merge=lfs -text
*.icm filter=lfs diff=lfs merge=lfs -text

View File

@@ -3,7 +3,7 @@ keys: # cat /etc/ssh/ssh_host_ed25519_key.pub | ssh-to-age
- &pc age1ffvr5pqd2lfj24e3fh53s92z6h76fda3du4y4k6r3yjumdwvpfgqzj033a
- &vps6 age164tyqklwhdm57tfm5u863mdt2xrzrrzac4py8a0j9y6kzqcjy9zsp073t6
- &vps7 age137x7csalutwvfygvvzpemlsywvdxj3j4z93a50z2sjx03w6zau8q3r5902
- &yoga age1qrea4twxdhd7fnvlq5v45528c90qy6hp2wa55kghsxzgut6n6fxs7w6u42
- &surface age1ck5vzs0xqx0jplmuksrkh45xwmkm2t05m2wyq5k2w2mnkmn79fxs6tvl3l
- &nas age19lhcwk37jmvn6z0v4dpdfh0k4u23f76twdjknc0p7atktf37rd7s4t4wj3
- &xmupc1 age19ax6vm3pv8rph5tq3mmehd9sy9jk823tw8svsd790r0lkslycquqvlwz9m
creation_rules:
@@ -27,15 +27,11 @@ creation_rules:
- age:
- *chn
- *nas
- path_regex: secrets/xmupc1/.*$
- path_regex: secrets/surface/.*$
key_groups:
- age:
- *chn
- path_regex: secrets/yoga/.*$
key_groups:
- age:
- *chn
- *yoga
- *surface
- path_regex: secrets/xmupc1/.*$
key_groups:
- age:

101
devices/nas/default.nix Normal file
View File

@@ -0,0 +1,101 @@
inputs:
{
config =
{
nixos =
{
system =
{
fileSystems =
{
mount =
{
vfat."/dev/disk/by-uuid/13BC-F0C9" = "/boot/efi";
btrfs =
{
"/dev/disk/by-uuid/0e184f3b-af6c-4f5d-926a-2559f2dc3063"."/boot" = "/boot";
"/dev/mapper/nix"."/nix" = "/nix";
"/dev/mapper/root1" =
{
"/nix/rootfs" = "/nix/rootfs";
"/nix/persistent" = "/nix/persistent";
"/nix/nodatacow" = "/nix/nodatacow";
"/nix/rootfs/current" = "/";
"/nix/backup" = "/nix/backup";
};
};
};
decrypt.manual =
{
enable = true;
devices =
{
"/dev/disk/by-uuid/5cf1d19d-b4a5-4e67-8e10-f63f0d5bb649".mapper = "root1";
"/dev/disk/by-uuid/aa684baf-fd8a-459c-99ba-11eb7636cb0d".mapper = "root2";
"/dev/disk/by-uuid/a779198f-cce9-4c3d-a64a-9ec45f6f5495" = { mapper = "nix"; ssd = true; };
};
delayedMount = [ "/" "/nix" ];
};
swap = [ "/nix/swap/swap" ];
rollingRootfs = { device = "/dev/mapper/root1"; path = "/nix/rootfs"; };
};
initrd.sshd.enable = true;
grub.installDevice = "efi";
nixpkgs.march = "silvermont";
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
kernel.patches = [ "cjktty" ];
networking.hostname = "nas";
gui.preferred = false;
};
hardware = { cpus = [ "intel" ]; gpu.type = "intel"; };
packages.packageSet = "desktop-fat";
services =
{
snapper.enable = false;
fontconfig.enable = true;
samba =
{
enable = true;
hostsAllowed = "192.168. 127.";
shares = { home.path = "/home"; root.path = "/"; };
};
sshd = { enable = true; passwordAuthentication = true; };
xray.client =
{
enable = true;
serverAddress = "74.211.99.69";
serverName = "vps6.xserver.chn.moe";
dns.extraInterfaces = [ "docker0" ];
};
xrdp = { enable = true; hostname = [ "nas.chn.moe" "office.chn.moe" ]; };
groupshare.enable = true;
smartd.enable = true;
beesd =
{
enable = true;
instances =
{
root = { device = "/"; hashTableSizeMB = 2048; };
nix = { device = "/nix"; hashTableSizeMB = 128; };
};
};
frpClient =
{
enable = true;
serverName = "frp.chn.moe";
user = "nas";
stcp.hpc = { localIp = "hpc.xmu.edu.cn"; localPort = 22; };
};
nginx = { enable = true; applications.webdav.instances."local.webdav.chn.moe" = {}; };
wireguard =
{
enable = true;
peers = [ "vps6" ];
publicKey = "xCYRbZEaGloMk7Awr00UR3JcDJy4AzVp4QvGNoyEgFY=";
wireguardIp = "192.168.83.4";
};
};
users.users = [ "chn" "xll" "zem" "yjq" "yxy" ];
};
};
}

BIN
devices/pc/color/TPLCD_161B_Default.icm LFS Executable file

Binary file not shown.

BIN
devices/pc/color/TPLCD_161B_Native.icm LFS Executable file

Binary file not shown.

Binary file not shown.

BIN
devices/pc/color/TPLCD_161B_REC709.icm LFS Executable file

Binary file not shown.

BIN
devices/pc/color/TPLCD_161B_sRGB.icm LFS Executable file

Binary file not shown.

156
devices/pc/default.nix Normal file
View File

@@ -0,0 +1,156 @@
inputs:
{
config =
{
nixos =
{
system =
{
fileSystems =
{
mount =
{
vfat."/dev/disk/by-uuid/3F57-0EBE" = "/boot/efi";
btrfs =
{
"/dev/disk/by-uuid/02e426ec-cfa2-4a18-b3a5-57ef04d66614"."/" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
decrypt.auto =
{
"/dev/disk/by-uuid/55fdd19f-0f1d-4c37-bd4e-6df44fc31f26" = { mapper = "root"; ssd = true; };
"/dev/disk/by-uuid/4be45329-a054-4c20-8965-8c5b7ee6b35d" =
{ mapper = "swap"; ssd = true; before = [ "root" ]; };
};
swap = [ "/dev/mapper/swap" ];
resume = "/dev/mapper/swap";
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
grub =
{
# TODO: install windows
# windowsEntries = { "7317-1DB6" = "Windows"; "7321-FA9C" = "Windows for malware"; };
installDevice = "efi";
};
nix =
{
marches =
[
"znver2" "znver3" "znver4"
# FXSR SAHF XSAVE
"sandybridge"
# FXSR PREFETCHW RDRND SAHF
"silvermont"
# FXSR HLE LZCNT PREFETCHW RDRND SAHF XSAVE
"broadwell"
# FXSR HLE LZCNT PREFETCHW RDRND SAHF SGX XSAVE
"skylake"
# AVX-VNNI CLDEMOTE GFNI-SSE HRESET KL LZCNT MOVDIR64B MOVDIRI PCONFIG PREFETCHW PTWRITE RDRND
# SERIALIZE SGX WAITPKG WIDEKL XSAVE XSAVEOPT
"alderlake"
];
};
nixpkgs =
{ march = "znver4"; cuda = { enable = true; capabilities = [ "8.9" ]; forwardCompat = false; }; };
kernel.patches = [ "cjktty" "lantian" ];
networking.hostname = "pc";
sysctl.laptop-mode = 5;
};
hardware =
{
cpus = [ "amd" ];
gpu = { type = "amd+nvidia"; prime.busId = { amd = "8:0:0"; nvidia = "1:0:0"; }; };
# gpu.type = "amd";
bluetooth.enable = true;
joystick.enable = true;
printer.enable = true;
sound.enable = true;
legion.enable = true;
};
packages.packageSet = "workstation";
virtualization =
{
waydroid.enable = true;
docker.enable = true;
kvmHost = { enable = true; gui = true; autoSuspend = [ "win10" "hardconnect" ]; };
nspawn = [ "arch" "ubuntu-22.04" "fedora" ];
};
services =
{
snapper.enable = true;
fontconfig.enable = true;
samba =
{
enable = true;
private = true;
hostsAllowed = "192.168. 127.";
shares =
{
media.path = "/run/media/chn";
home.path = "/home/chn";
mnt.path = "/mnt";
share.path = "/home/chn/share";
};
};
sshd.enable = true;
xray.client =
{
enable = true;
serverAddress = "74.211.99.69";
serverName = "vps6.xserver.chn.moe";
dns =
{
extraInterfaces = [ "docker0" ];
hosts =
{
"mirism.one" = "74.211.99.69";
"beta.mirism.one" = "74.211.99.69";
"ng01.mirism.one" = "74.211.99.69";
"debug.mirism.one" = "127.0.0.1";
"initrd.vps6.chn.moe" = "74.211.99.69";
"nix-store.chn.moe" = "127.0.0.1";
"initrd.nas.chn.moe" = "192.168.1.185";
};
};
};
firewall.trustedInterfaces = [ "virbr0" "waydroid0" ];
acme = { enable = true; cert."debug.mirism.one" = {}; };
frpClient =
{
enable = true;
serverName = "frp.chn.moe";
user = "pc";
stcpVisitor."yy.vnc".localPort = 6187;
};
nix-serve = { enable = true; hostname = "nix-store.chn.moe"; };
smartd.enable = true;
misskey.instances.misskey.hostname = "xn--qbtm095lrg0bfka60z.chn.moe";
beesd = { enable = true; instances.root = { device = "/"; hashTableSizeMB = 2048; threads = 4; }; };
wireguard =
{
enable = true;
peers = [ "vps6" ];
publicKey = "l1gFSDCeBxyf/BipXNvoEvVvLqPgdil84nmr5q6+EEw=";
wireguardIp = "192.168.83.3";
};
gamemode = { enable = true; drmDevice = 1; };
};
bugs = [ "xmunet" "backlight" "amdpstate" ];
};
virtualisation.virtualbox.host = { enable = true; enableExtensionPack = true; };
services.colord.enable = true;
specialisation.nvidia.configuration =
{
system.nixos.tags = [ "discreate graphic" ];
services =
{
xserver.displayManager.defaultSession = inputs.lib.mkForce "plasma";
colord.enable = inputs.lib.mkForce false;
};
hardware.nvidia.forceFullCompositionPipeline = true;
home-manager.users.chn.config.programs.plasma.startup.autoStartScript.xcalib.text =
"${inputs.pkgs.xcalib}/bin/xcalib -d :0 ${./color/TPLCD_161B_Default.icm}";
};
};
}

View File

@@ -0,0 +1,66 @@
inputs:
{
imports = inputs.localLib.mkModules [ inputs.topInputs.nixos-hardware.nixosModules.microsoft-surface-pro-intel ];
config =
{
nixos =
{
system =
{
fileSystems =
{
mount =
{
vfat."/dev/disk/by-uuid/7179-9C69" = "/boot/efi";
btrfs =
{
"/dev/disk/by-uuid/c6d35075-85fe-4129-aaa8-f436ab85ce43"."/boot" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
decrypt.auto =
{
"/dev/disk/by-uuid/4f7420f9-ea19-4713-b084-2ac8f0a963ac" = { mapper = "root"; ssd = true; };
"/dev/disk/by-uuid/88bd9d44-928b-40a2-8f3d-6dcd257c4601" =
{ mapper = "swap"; ssd = true; before = [ "root" ]; };
};
swap = [ "/dev/mapper/swap" ];
resume = "/dev/mapper/swap";
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
nixpkgs.march = "skylake";
grub.installDevice = "efi";
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
kernel.patches = [ "cjktty" "lantian" "surface" ];
networking.hostname = "surface";
};
hardware =
{
cpus = [ "intel" ];
gpu.type = "intel";
bluetooth.enable = true;
joystick.enable = true;
printer.enable = true;
sound.enable = true;
};
packages.packageSet = "desktop-fat";
virtualization = { docker.enable = true; waydroid.enable = true; };
services =
{
snapper.enable = true;
fontconfig.enable = true;
sshd.enable = true;
xray.client =
{
enable = true;
serverAddress = "74.211.99.69";
serverName = "vps6.xserver.chn.moe";
dns.extraInterfaces = [ "docker0" ];
};
firewall.trustedInterfaces = [ "virbr0" ];
};
bugs = [ "xmunet" ];
};
environment.systemPackages = with inputs.pkgs; [ maliit-keyboard maliit-framework ];
};
}

83
devices/vps6/default.nix Normal file
View File

@@ -0,0 +1,83 @@
inputs:
{
config =
{
nixos =
{
system =
{
fileSystems =
{
mount =
{
btrfs =
{
"/dev/disk/by-uuid/24577c0e-d56b-45ba-8b36-95a848228600"."/boot" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
decrypt.manual =
{
enable = true;
devices."/dev/disk/by-uuid/4f8aca22-9ec6-4fad-b21a-fd9d8d0514e8" = { mapper = "root"; ssd = true; };
delayedMount = [ "/" ];
};
swap = [ "/nix/swap/swap" ];
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
grub.installDevice = "/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0";
nixpkgs.march = "sandybridge";
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
initrd.sshd.enable = true;
networking.hostname = "vps6";
};
packages.packageSet = "server";
services =
{
snapper.enable = true;
sshd.enable = true;
xray.server = { enable = true; serverName = "vps6.xserver.chn.moe"; };
frpServer = { enable = true; serverName = "frp.chn.moe"; };
nginx =
{
streamProxy.map =
{
"anchor.fm" = { upstream = "anchor.fm:443"; proxyProtocol = false; };
"podcasters.spotify.com" = { upstream = "podcasters.spotify.com:443"; proxyProtocol = false; };
"xlog.chn.moe" = { upstream = "cname.xlog.app:443"; proxyProtocol = false; };
}
// (builtins.listToAttrs (builtins.map
(site: { name = "${site}.chn.moe"; value.upstream.address = "wireguard.pc.chn.moe"; })
[ "nix-store" "xn--qbtm095lrg0bfka60z" ]))
// (builtins.listToAttrs (builtins.map
(site: { name = "${site}.chn.moe"; value.upstream.address = "wireguard.vps7.chn.moe"; })
[
"xn--s8w913fdga" "misskey" "synapse" "syncv3.synapse" "matrix" "syncv3.matrix"
"send" "kkmeeting" "api" "git" "grafana"
]));
applications =
{
element.instances."element.chn.moe" = {};
synapse-admin.instances."synapse-admin.chn.moe" = {};
catalog.enable = true;
blog.enable = true;
main.enable = true;
};
};
coturn.enable = true;
httpua.enable = true;
mirism.enable = true;
fail2ban.enable = true;
wireguard =
{
enable = true;
peers = [ "pc" "nas" "vps7" ];
publicKey = "AVOsYUKQQCvo3ctst3vNi8XSVWo1Wh15066aHh+KpF4=";
wireguardIp = "192.168.83.1";
listenIp = "74.211.99.69";
lighthouse = true;
};
};
};
};
}

78
devices/vps7/default.nix Normal file
View File

@@ -0,0 +1,78 @@
inputs:
{
config =
{
nixos =
{
system =
{
fileSystems =
{
mount =
{
btrfs =
{
"/dev/disk/by-uuid/e36287f7-7321-45fa-ba1e-d126717a65f0"."/boot" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
decrypt.manual =
{
enable = true;
devices."/dev/disk/by-uuid/db48c8de-bcf7-43ae-a977-60c4f390d5c4" = { mapper = "root"; ssd = true; };
delayedMount = [ "/" ];
};
swap = [ "/nix/swap/swap" ];
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
grub.installDevice = "/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0";
nixpkgs.march = "broadwell";
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
initrd.sshd.enable = true;
networking.hostname = "vps7";
gui.preferred = false;
};
packages.packageSet = "desktop";
services =
{
snapper.enable = true;
fontconfig.enable = true;
sshd.enable = true;
rsshub.enable = true;
wallabag.enable = true;
misskey.instances =
{
misskey.hostname = "xn--s8w913fdga.chn.moe";
misskey-old = { port = 9727; redis.port = 3546; meilisearch.enable = false; };
};
synapse.instances =
{
synapse.matrixHostname = "synapse.chn.moe";
matrix = { port = 8009; redisPort = 6380; slidingSyncPort = 9001; };
};
xrdp = { enable = true; hostname = [ "vps7.chn.moe" ]; };
vaultwarden.enable = true;
beesd = { enable = true; instances.root = { device = "/"; hashTableSizeMB = 1024; }; };
photoprism.enable = true;
nextcloud.enable = true;
freshrss.enable = true;
send.enable = true;
huginn.enable = true;
fz-new-order.enable = true;
nginx.applications = { kkmeeting.enable = true; webdav.instances."webdav.chn.moe" = {}; };
httpapi.enable = true;
gitea.enable = true;
grafana.enable = true;
fail2ban.enable = true;
wireguard =
{
enable = true;
peers = [ "vps6" ];
publicKey = "n056ppNxC9oECcW7wEbALnw8GeW7nrMImtexKWYVUBk=";
wireguardIp = "192.168.83.2";
listenIp = "95.111.228.40";
};
};
};
};
}

View File

@@ -0,0 +1,99 @@
inputs:
{
config =
{
nixos =
{
system =
{
fileSystems =
{
mount =
{
vfat."/dev/disk/by-uuid/3F57-0EBE" = "/boot/efi";
btrfs =
{
"/dev/disk/by-uuid/02e426ec-cfa2-4a18-b3a5-57ef04d66614"."/" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
swap = [ "/dev/mapper/swap" ];
resume = "/dev/mapper/swap";
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
grub.installDevice = "efi";
nixpkgs =
{
march = "znver3";
cuda =
{
enable = true;
capabilities =
[
# 2080 Ti
"7.5"
# 3090
"8.6"
# 4090
"8.9"
];
forwardCompat = false;
};
};
gui.preferred = false;
kernel.patches = [ "cjktty" ];
networking.hostname = "xmupc1";
};
hardware =
{
cpus = [ "amd" ];
# gpus = [ "nvidia" ];
bluetooth.enable = true;
joystick.enable = true;
printer.enable = true;
sound.enable = true;
# gamemode.drmDevice = 1;
};
packages.packageSet = "workstation";
virtualization = { docker.enable = true; kvmHost = { enable = true; gui = true; }; };
services =
{
snapper.enable = true;
fontconfig.enable = true;
samba =
{
enable = true;
private = true;
hostsAllowed = "192.168. 127.";
shares =
{
media.path = "/run/media/chn";
home.path = "/home/chn";
mnt.path = "/mnt";
share.path = "/home/chn/share";
};
};
sshd.enable = true;
xray.client =
{
enable = true;
serverAddress = "74.211.99.69";
serverName = "vps6.xserver.chn.moe";
dns.extraInterfaces = [ "docker0" ];
};
firewall.trustedInterfaces = [ "virbr0" "waydroid0" ];
acme = { enable = true; cert."debug.mirism.one" = {}; };
smartd.enable = true;
beesd = { enable = true; instances.root = { device = "/nix/persistent"; hashTableSizeMB = 2048; }; };
wireguard =
{
enable = true;
peers = [ "vps6" ];
publicKey = "JEY7D4ANfTpevjXNvGDYO6aGwtBGRXsf/iwNwjwDRQk=";
wireguardIp = "192.168.83.5";
};
};
bugs = [ "xmunet" "firefox" ];
};
};
}

899
flake.lock generated

File diff suppressed because it is too large Load Diff

609
flake.nix
View File

@@ -4,7 +4,7 @@
inputs =
{
nixpkgs.url = "github:CHN-beta/nixpkgs/nixos-23.11";
nixpkgs-unstable.url = "github:CHN-beta/nixpkgs/nixos-unstable";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
nixpkgs-2305.url = "github:CHN-beta/nixpkgs/nixos-23.05";
home-manager = { url = "github:nix-community/home-manager/release-23.11"; inputs.nixpkgs.follows = "nixpkgs"; };
sops-nix =
@@ -13,7 +13,7 @@
inputs = { nixpkgs.follows = "nixpkgs"; nixpkgs-stable.follows = "nixpkgs"; };
};
aagl = { url = "github:ezKEa/aagl-gtk-on-nix"; inputs.nixpkgs.follows = "nixpkgs"; };
nix-index-database = { url = "github:Mic92/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; };
nix-index-database = { url = "github:Mic92/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs-unstable"; };
nur.url = "github:nix-community/NUR";
nixos-cn = { url = "github:nixos-cn/flakes"; inputs.nixpkgs.follows = "nixpkgs"; };
nur-xddxdd = { url = "github:xddxdd/nur-packages"; inputs.nixpkgs.follows = "nixpkgs"; };
@@ -24,13 +24,15 @@
inputs = { nixpkgs.follows = "nixpkgs"; nix-index-database.follows = "nix-index-database"; };
};
impermanence.url = "github:nix-community/impermanence";
qchem = { url = "github:Nix-QChem/NixOS-QChem"; inputs.nixpkgs.follows = "nixpkgs"; };
qchem = { url = "github:Nix-QChem/NixOS-QChem/release-23.11"; inputs.nixpkgs.follows = "nixpkgs"; };
nixd = { url = "github:nix-community/nixd"; inputs.nixpkgs.follows = "nixpkgs"; };
napalm = { url = "github:nix-community/napalm"; inputs.nixpkgs.follows = "nixpkgs"; };
nixpak = { url = "github:nixpak/nixpak"; inputs.nixpkgs.follows = "nixpkgs"; };
deploy-rs = { url = "github:serokell/deploy-rs"; inputs.nixpkgs.follows = "nixpkgs"; };
pnpm2nix-nzbr = { url = "github:CHN-beta/pnpm2nix-nzbr"; inputs.nixpkgs.follows = "nixpkgs"; };
# oneapi
lmix = { url = "github:CHN-beta/lmix"; inputs.nixpkgs.follows = "nixpkgs"; };
# nvhpc
dguibert-nur-packages = { url = "github:CHN-beta/dguibert-nur-packages"; inputs.nixpkgs.follows = "nixpkgs"; };
plasma-manager =
{
@@ -38,6 +40,30 @@
inputs = { nixpkgs.follows = "nixpkgs"; home-manager.follows = "home-manager"; };
};
nix-doom-emacs = { url = "github:nix-community/nix-doom-emacs"; inputs.nixpkgs.follows = "nixpkgs"; };
nur-linyinfeng = { url = "github:linyinfeng/nur-packages"; inputs.nixpkgs.follows = "nixpkgs"; };
nixos-hardware.url = "github:CHN-beta/nixos-hardware";
envfs = { url = "github:Mic92/envfs"; inputs.nixpkgs.follows = "nixpkgs"; };
misskey = { url = "git+https://github.com/CHN-beta/misskey?submodules=1"; flake = false; };
rsshub = { url = "github:DIYgod/RSSHub"; flake = false; };
zpp-bits = { url = "github:eyalz800/zpp_bits"; flake = false; };
citation-style-language = { url = "git+https://github.com/zepinglee/citeproc-lua?submodules=1"; flake = false; };
concurrencpp = { url = "github:David-Haim/concurrencpp"; flake = false; };
cppcoro = { url = "github:Garcia6l20/cppcoro"; flake = false; };
date = { url = "github:HowardHinnant/date"; flake = false; };
eigen = { url = "gitlab:libeigen/eigen"; flake = false; };
matplotplusplus = { url = "github:alandefreitas/matplotplusplus"; flake = false; };
nameof = { url = "github:Neargye/nameof"; flake = false; };
nodesoup = { url = "github:olvb/nodesoup"; flake = false; };
tgbot-cpp = { url = "github:reo7sp/tgbot-cpp"; flake = false; };
v-sim = { url = "gitlab:l_sim/v_sim"; flake = false; };
win11os-kde = { url = "github:yeyushengfan258/Win11OS-kde"; flake = false; };
fluent-kde = { url = "github:vinceliuice/Fluent-kde"; flake = false; };
rycee = { url = "gitlab:rycee/nur-expressions"; flake = false; };
cascade = { url = "github:CHN-beta/cascade"; flake = false; };
blurred-wallpaper = { url = "github:bouteillerAlan/blurredwallpaper"; flake = false; };
slate = { url = "github:TheBigWazz/Slate"; flake = false; };
linux-surface = { url = "github:linux-surface/linux-surface"; flake = false; };
};
outputs = inputs:
@@ -50,7 +76,7 @@
default = inputs.nixpkgs.legacyPackages.x86_64-linux.writeText "systems"
(builtins.concatStringsSep "\n" (builtins.map
(system: builtins.toString inputs.self.outputs.nixosConfigurations.${system}.config.system.build.toplevel)
[ "pc" "vps6" "vps7" "nas" "yoga" ]));
[ "pc" "vps6" "vps7" "nas" "surface" ]));
}
// (
builtins.listToAttrs (builtins.map
@@ -59,566 +85,32 @@
name = system;
value = inputs.self.outputs.nixosConfigurations.${system}.config.system.build.toplevel;
})
[ "pc" "vps6" "vps7" "nas" "yoga" "xmupc1" ])
[ "pc" "vps6" "vps7" "nas" "surface" "xmupc1" ])
);
# ssh-keygen -t rsa -C root@pe -f /mnt/nix/persistent/etc/ssh/ssh_host_rsa_key
# ssh-keygen -t ed25519 -C root@pe -f /mnt/nix/persistent/etc/ssh/ssh_host_ed25519_key
# systemd-machine-id-setup --root=/mnt/nix/persistent
nixosConfigurations =
let
system =
nixosConfigurations = builtins.listToAttrs (builtins.map
(system:
{
name = system;
value = inputs.nixpkgs.lib.nixosSystem
{
pc =
{
system =
system = "x86_64-linux";
specialArgs = { topInputs = inputs; inherit localLib; };
modules = localLib.mkModules
[
(moduleInputs:
{
fileSystems =
{
mount =
{
vfat."/dev/disk/by-uuid/3F57-0EBE" = "/boot/efi";
btrfs =
{
"/dev/disk/by-uuid/02e426ec-cfa2-4a18-b3a5-57ef04d66614"."/" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
decrypt.auto =
{
"/dev/disk/by-uuid/55fdd19f-0f1d-4c37-bd4e-6df44fc31f26" = { mapper = "root"; ssd = true; };
"/dev/disk/by-uuid/4be45329-a054-4c20-8965-8c5b7ee6b35d" =
{ mapper = "swap"; ssd = true; before = [ "root" ]; };
};
swap = [ "/dev/mapper/swap" ];
resume = "/dev/mapper/swap";
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
grub =
{
windowsEntries = { "7317-1DB6" = "Windows"; "7321-FA9C" = "Windows for malware"; };
installDevice = "efi";
};
nix =
{
marches =
[
"alderlake"
# CX16
"sandybridge"
# CX16 SAHF FXSR
"silvermont"
# RDSEED MWAITX SHA CLZERO CX16 SSE4A ABM CLFLUSHOPT WBNOINVD
"znver2" "znver3"
# CX16 SAHF FXSR HLE RDSEED
"broadwell"
];
keepOutputs = true;
};
nixpkgs =
{ march = "alderlake"; cuda = { enable = true; capabilities = [ "8.6" ]; forwardCompat = false; }; };
kernel.patches = [ "cjktty" "lantian" ];
impermanence.enable = true;
networking.hostname = "pc";
sysctl.laptop-mode = 5;
};
hardware =
{
cpus = [ "intel" ];
gpus = [ "intel" "nvidia" ];
bluetooth.enable = true;
joystick.enable = true;
printer.enable = true;
sound.enable = true;
prime = { enable = true; mode = "offload"; busId = { intel = "PCI:0:2:0"; nvidia = "PCI:1:0:0"; }; };
gamemode.drmDevice = 1;
};
packages.packageSet = "workstation";
virtualization =
{
waydroid.enable = true;
docker.enable = true;
kvmHost = { enable = true; gui = true; autoSuspend = [ "win10" "hardconnect" ]; };
# kvmGuest.enable = true;
nspawn = [ "arch" "ubuntu-22.04" "fedora" ];
};
services =
{
snapper.enable = true;
fontconfig.enable = true;
samba =
{
enable = true;
private = true;
hostsAllowed = "192.168. 127.";
shares =
{
media.path = "/run/media/chn";
home.path = "/home/chn";
mnt.path = "/mnt";
share.path = "/home/chn/share";
};
};
sshd.enable = true;
xrayClient =
{
enable = true;
serverAddress = "74.211.99.69";
serverName = "vps6.xserver.chn.moe";
dns =
{
extraInterfaces = [ "docker0" ];
hosts =
{
"mirism.one" = "74.211.99.69";
"beta.mirism.one" = "74.211.99.69";
"ng01.mirism.one" = "74.211.99.69";
"debug.mirism.one" = "127.0.0.1";
"initrd.vps6.chn.moe" = "74.211.99.69";
"nix-store.chn.moe" = "127.0.0.1";
"initrd.nas.chn.moe" = "192.168.1.185";
};
};
};
firewall.trustedInterfaces = [ "virbr0" "waydroid0" ];
acme = { enable = true; cert."debug.mirism.one" = {}; };
frpClient =
{
enable = true;
serverName = "frp.chn.moe";
user = "pc";
stcpVisitor."yy.vnc".localPort = 6187;
};
nix-serve = { enable = true; hostname = "nix-store.chn.moe"; };
smartd.enable = true;
misskey.instances.misskey.hostname = "xn--qbtm095lrg0bfka60z.chn.moe";
beesd = { enable = true; instances.root = { device = "/"; hashTableSizeMB = 2048; }; };
wireguard =
{
enable = true;
peers = [ "vps6" ];
publicKey = "l1gFSDCeBxyf/BipXNvoEvVvLqPgdil84nmr5q6+EEw=";
wireguardIp = "192.168.83.3";
};
};
bugs =
[
"suspend-hibernate-no-platform" "hibernate-iwlwifi" "suspend-lid-no-wakeup" "xmunet"
"suspend-hibernate-waydroid"
];
};
vps6 =
{
system =
{
fileSystems =
{
mount =
{
btrfs =
{
"/dev/disk/by-uuid/24577c0e-d56b-45ba-8b36-95a848228600"."/boot" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
decrypt.manual =
{
enable = true;
devices."/dev/disk/by-uuid/4f8aca22-9ec6-4fad-b21a-fd9d8d0514e8" = { mapper = "root"; ssd = true; };
delayedMount = [ "/" ];
};
swap = [ "/nix/swap/swap" ];
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
grub.installDevice = "/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0";
nixpkgs.march = "sandybridge";
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
initrd.sshd.enable = true;
impermanence.enable = true;
networking.hostname = "vps6";
};
packages.packageSet = "server";
services =
{
snapper.enable = true;
sshd.enable = true;
xrayServer = { enable = true; serverName = "vps6.xserver.chn.moe"; };
frpServer = { enable = true; serverName = "frp.chn.moe"; };
nginx =
{
streamProxy.map =
{
"anchor.fm" = { upstream = "anchor.fm:443"; proxyProtocol = false; };
"podcasters.spotify.com" = { upstream = "podcasters.spotify.com:443"; proxyProtocol = false; };
"xlog.chn.moe" = { upstream = "cname.xlog.app:443"; proxyProtocol = false; };
}
// (builtins.listToAttrs (builtins.map
(site: { name = "${site}.chn.moe"; value.upstream.address = "wireguard.pc.chn.moe"; })
[ "nix-store" "xn--qbtm095lrg0bfka60z" ]))
// (builtins.listToAttrs (builtins.map
(site: { name = "${site}.chn.moe"; value.upstream.address = "wireguard.vps7.chn.moe"; })
[ "xn--s8w913fdga" "misskey" "synapse" "matrix" "send" "kkmeeting" "api" "git" "grafana" ]));
applications =
{
element.instances."element.chn.moe" = {};
synapse-admin.instances."synapse-admin.chn.moe" = {};
catalog.enable = true;
blog.enable = true;
main.enable = true;
};
};
coturn.enable = true;
httpua.enable = true;
mirism.enable = true;
fail2ban.enable = true;
wireguard =
{
enable = true;
peers = [ "pc" "nas" "vps7" ];
publicKey = "AVOsYUKQQCvo3ctst3vNi8XSVWo1Wh15066aHh+KpF4=";
wireguardIp = "192.168.83.1";
externalIp = "74.211.99.69";
lighthouse = true;
};
};
};
vps7 =
{
system =
{
fileSystems =
{
mount =
{
btrfs =
{
"/dev/disk/by-uuid/e36287f7-7321-45fa-ba1e-d126717a65f0"."/boot" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
decrypt.manual =
{
enable = true;
devices."/dev/disk/by-uuid/db48c8de-bcf7-43ae-a977-60c4f390d5c4" = { mapper = "root"; ssd = true; };
delayedMount = [ "/" ];
};
swap = [ "/nix/swap/swap" ];
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
grub.installDevice = "/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0";
nixpkgs.march = "broadwell";
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
initrd.sshd.enable = true;
impermanence.enable = true;
networking.hostname = "vps7";
gui.preferred = false;
};
packages.packageSet = "desktop";
services =
{
snapper.enable = true;
fontconfig.enable = true;
sshd.enable = true;
rsshub.enable = true;
wallabag.enable = true;
misskey.instances =
{
misskey.hostname = "xn--s8w913fdga.chn.moe";
misskey-old = { port = 9727; redis.port = 3546; meilisearch.enable = false; };
};
synapse.instances =
{
synapse.matrixHostname = "synapse.chn.moe";
matrix = { port = 8009; redisPort = 6380; hostname = "matrix.chn.moe"; };
};
xrdp = { enable = true; hostname = [ "vps7.chn.moe" ]; };
vaultwarden.enable = true;
beesd = { enable = true; instances.root = { device = "/"; hashTableSizeMB = 1024; }; };
photoprism.enable = true;
nextcloud.enable = true;
freshrss.enable = true;
send.enable = true;
huginn.enable = true;
fz-new-order.enable = true;
nginx.applications = { kkmeeting.enable = true; webdav.instances."webdav.chn.moe" = {}; };
httpapi.enable = true;
mastodon.enable = true;
gitea.enable = true;
grafana.enable = true;
fail2ban.enable = true;
wireguard =
{
enable = true;
peers = [ "vps6" ];
publicKey = "n056ppNxC9oECcW7wEbALnw8GeW7nrMImtexKWYVUBk=";
wireguardIp = "192.168.83.2";
externalIp = "95.111.228.40";
};
};
};
nas =
{
system =
{
fileSystems =
{
mount =
{
vfat."/dev/disk/by-uuid/13BC-F0C9" = "/boot/efi";
btrfs =
{
"/dev/disk/by-uuid/0e184f3b-af6c-4f5d-926a-2559f2dc3063"."/boot" = "/boot";
"/dev/mapper/nix"."/nix" = "/nix";
"/dev/mapper/root1" =
{
"/nix/rootfs" = "/nix/rootfs";
"/nix/persistent" = "/nix/persistent";
"/nix/nodatacow" = "/nix/nodatacow";
"/nix/rootfs/current" = "/";
"/nix/backup" = "/nix/backup";
};
};
};
decrypt.manual =
{
enable = true;
devices =
{
"/dev/disk/by-uuid/5cf1d19d-b4a5-4e67-8e10-f63f0d5bb649".mapper = "root1";
"/dev/disk/by-uuid/aa684baf-fd8a-459c-99ba-11eb7636cb0d".mapper = "root2";
"/dev/disk/by-uuid/a779198f-cce9-4c3d-a64a-9ec45f6f5495" = { mapper = "nix"; ssd = true; };
};
delayedMount = [ "/" "/nix" ];
};
swap = [ "/nix/swap/swap" ];
rollingRootfs = { device = "/dev/mapper/root1"; path = "/nix/rootfs"; };
};
initrd.sshd.enable = true;
grub.installDevice = "efi";
nixpkgs.march = "silvermont";
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
kernel.patches = [ "cjktty" ];
impermanence.enable = true;
networking.hostname = "nas";
gui.preferred = false;
};
hardware = { cpus = [ "intel" ]; gpus = [ "intel" ]; };
packages.packageSet = "desktop";
services =
{
snapper.enable = true;
fontconfig.enable = true;
samba =
{
enable = true;
hostsAllowed = "192.168. 127.";
shares = { home.path = "/home"; root.path = "/"; };
};
sshd = { enable = true; passwordAuthentication = true; };
xrayClient =
{
enable = true;
serverAddress = "74.211.99.69";
serverName = "vps6.xserver.chn.moe";
dns.extraInterfaces = [ "docker0" ];
};
xrdp = { enable = true; hostname = [ "nas.chn.moe" "office.chn.moe" ]; };
groupshare.enable = true;
smartd.enable = true;
beesd =
{
enable = true;
instances =
{
root = { device = "/"; hashTableSizeMB = 2048; };
nix = { device = "/nix"; hashTableSizeMB = 128; };
};
};
frpClient =
{
enable = true;
serverName = "frp.chn.moe";
user = "nas";
stcp.hpc = { localIp = "hpc.xmu.edu.cn"; localPort = 22; };
};
nginx = { enable = true; applications.webdav.instances."local.webdav.chn.moe" = {}; };
wireguard =
{
enable = true;
peers = [ "vps6" ];
publicKey = "xCYRbZEaGloMk7Awr00UR3JcDJy4AzVp4QvGNoyEgFY=";
wireguardIp = "192.168.83.4";
};
};
users.users = [ "chn" "xll" "zem" "yjq" "yxy" ];
};
yoga =
{
system =
{
fileSystems =
{
mount =
{
vfat."/dev/disk/by-uuid/86B8-CF80" = "/boot/efi";
btrfs =
{
"/dev/disk/by-uuid/e252f81d-b4b3-479f-8664-380a9b73cf83"."/boot" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
decrypt.auto."/dev/disk/by-uuid/8186d34e-005c-4461-94c7-1003a5bd86c0" =
{ mapper = "root"; ssd = true; };
swap = [ "/nix/swap/swap" ];
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
nixpkgs.march = "silvermont";
grub.installDevice = "efi";
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
kernel.patches = [ "cjktty" ];
impermanence.enable = true;
networking.hostname = "yoga";
};
hardware =
{
cpus = [ "intel" ];
gpus = [ "intel" ];
bluetooth.enable = true;
joystick.enable = true;
printer.enable = true;
sound.enable = true;
halo-keyboard.enable = true;
};
packages.packageSet = "desktop-fat";
virtualization.docker.enable = true;
services =
{
snapper.enable = true;
fontconfig.enable = true;
sshd.enable = true;
xrayClient =
{
enable = true;
serverAddress = "74.211.99.69";
serverName = "vps6.xserver.chn.moe";
dns.extraInterfaces = [ "docker0" ];
};
firewall.trustedInterfaces = [ "virbr0" ];
};
bugs = [ "xmunet" ];
};
xmupc1 =
{
system =
{
fileSystems =
{
mount =
{
vfat."/dev/disk/by-uuid/3F57-0EBE" = "/boot/efi";
btrfs =
{
"/dev/disk/by-uuid/02e426ec-cfa2-4a18-b3a5-57ef04d66614"."/" = "/boot";
"/dev/mapper/root" = { "/nix" = "/nix"; "/nix/rootfs/current" = "/"; };
};
};
swap = [ "/dev/mapper/swap" ];
resume = "/dev/mapper/swap";
rollingRootfs = { device = "/dev/mapper/root"; path = "/nix/rootfs"; };
};
grub.installDevice = "efi";
nixpkgs =
{
march = "znver3";
cuda =
{
enable = true;
capabilities =
[
# 2080 Ti
"7.5"
# 3090
"8.6"
# 4090
"8.9"
];
forwardCompat = false;
};
};
gui.preferred = false;
kernel.patches = [ "cjktty" ];
impermanence.enable = true;
networking.hostname = "xmupc1";
};
hardware =
{
cpus = [ "amd" ];
gpus = [ "nvidia" ];
bluetooth.enable = true;
joystick.enable = true;
printer.enable = true;
sound.enable = true;
gamemode.drmDevice = 1;
};
packages.packageSet = "workstation";
virtualization = { docker.enable = true; kvmHost = { enable = true; gui = true; }; };
services =
{
snapper.enable = true;
fontconfig.enable = true;
samba =
{
enable = true;
private = true;
hostsAllowed = "192.168. 127.";
shares =
{
media.path = "/run/media/chn";
home.path = "/home/chn";
mnt.path = "/mnt";
share.path = "/home/chn/share";
};
};
sshd.enable = true;
xrayClient =
{
enable = true;
serverAddress = "74.211.99.69";
serverName = "vps6.xserver.chn.moe";
dns.extraInterfaces = [ "docker0" ];
};
firewall.trustedInterfaces = [ "virbr0" "waydroid0" ];
acme = { enable = true; cert."debug.mirism.one" = {}; };
smartd.enable = true;
beesd = { enable = true; instances.root = { device = "/nix/persistent"; hashTableSizeMB = 2048; }; };
wireguard =
{
enable = true;
peers = [ "vps6" ];
publicKey = "JEY7D4ANfTpevjXNvGDYO6aGwtBGRXsf/iwNwjwDRQk=";
wireguardIp = "192.168.83.5";
};
};
bugs = [ "xmunet" "firefox" ];
};
config.nixpkgs.overlays = [(final: prev: { localPackages =
import ./local/pkgs { inherit (moduleInputs) lib; pkgs = final; topInputs = inputs; };})];
})
./modules
./devices/${system}
];
};
in builtins.listToAttrs (builtins.map
(system:
{
name = system.name;
value = inputs.nixpkgs.lib.nixosSystem
{
system = "x86_64-linux";
specialArgs = { topInputs = inputs; inherit localLib; };
modules = localLib.mkModules
[
(inputs: { config.nixpkgs.overlays = [(final: prev:
{ localPackages = (import ./local/pkgs { inherit (inputs) lib; pkgs = final; }); })]; })
./modules
{ config.nixos = system.value; }
];
};
})
(localLib.attrsToList system));
})
[ "pc" "vps6" "vps7" "nas" "surface" "xmupc1" ]);
# sudo HTTPS_PROXY=socks5://127.0.0.1:10884 nixos-install --flake .#bootstrap --option substituters http://127.0.0.1:5000 --option require-sigs false --option system-features gccarch-silvermont
# nix-serve -p 5000
# nix copy --substitute-on-destination --to ssh://server /run/current-system
@@ -654,10 +146,11 @@
inputs.self.nixosConfigurations.${node};
};
})
[ "vps6" "vps7" "nas" "yoga" ]);
[ "vps6" "vps7" "nas" "surface" ]);
};
checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks inputs.self.deploy) inputs.deploy-rs.lib;
overlays.default = final: prev:
{ localPackages = (import ./local/pkgs { inherit (inputs) lib; pkgs = final; }); };
config.archive = false;
};
}

View File

@@ -1,6 +1,6 @@
lib:
{
attrsToList = Attrs: builtins.map ( name: { inherit name; value = Attrs.${name}; } ) ( builtins.attrNames Attrs );
attrsToList = attrs: builtins.map (name: { inherit name; value = attrs.${name}; }) (builtins.attrNames attrs);
mkConditional = condition: trueResult: falseResult: let inherit (lib) mkMerge mkIf; in
mkMerge [ ( mkIf condition trueResult ) ( mkIf (!condition) falseResult ) ];

View File

@@ -0,0 +1,11 @@
{ stdenv, src }: stdenv.mkDerivation
{
name = "blurred-wallpaper";
inherit src;
phases = [ "installPhase" ];
installPhase =
''
mkdir -p $out/share/plasma/wallpapers/a2n.blur
cp -r $src/* $out/share/plasma/wallpapers/a2n.blur
'';
}

View File

@@ -1,22 +1,14 @@
{ stdenvNoCC, texlive, fetchFromGitHub }: stdenvNoCC.mkDerivation (finalAttrs: rec
{ stdenvNoCC, texlive, src }: stdenvNoCC.mkDerivation (finalAttrs:
{
pname = "citation-style-language";
version = "0.4.5";
passthru = {
name = "citation-style-language";
inherit src;
passthru =
{
pkgs = [ finalAttrs.finalPackage ];
tlDeps = with texlive; [ latex ];
tlType = "run";
};
src = fetchFromGitHub
{
owner = "zepinglee";
repo = "citeproc-lua";
rev = "v${version}";
sha256 = "XH+GH+t/10hr4bfaod8F9JPxmBnAQlDmpSvQNDQsslM=";
fetchSubmodules = true;
};
nativeBuildInputs = [ texlive.combined.scheme-full ];
dontConfigure = true;
dontBuild = true;

View File

@@ -1,13 +1,6 @@
{ stdenv, fetchFromGitHub, cmake }: stdenv.mkDerivation rec
{ stdenv, cmake, src }: stdenv.mkDerivation
{
pname = "concurrencpp";
version = "0.1.7";
src = fetchFromGitHub
{
owner = "David-Haim";
repo = "concurrencpp";
rev = "v.${version}";
sha256 = "4qT29YVjKEWcMrI5R5Ps8aD4grAAgz5VOxANjpp1oTo=";
};
name = "concurrencpp";
inherit src;
nativeBuildInputs = [ cmake ];
}

View File

@@ -1,13 +1,7 @@
{ stdenv, fetchFromGitHub, cmake }: stdenv.mkDerivation
{ stdenv, cmake, src }: stdenv.mkDerivation
{
name = "cppcoro";
src = fetchFromGitHub
{
owner = "Garcia6l20";
repo = "cppcoro";
rev = "e1d53e620b0eee828915ada179cd7ca8e66ca855";
sha256 = "luBkf1x5kqXaVbQM01yWRmA5QvrQNZkFVCjRctJdnXc=";
};
inherit src;
nativeBuildInputs = [ cmake ];
patches = [ ./cppcoro-include-utility.patch ];
}

View File

@@ -1,18 +1,13 @@
{ stdenv, fetchFromGitHub }: stdenv.mkDerivation
{ stdenv, src }: stdenv.mkDerivation
{
name = "date";
src = fetchFromGitHub
{
owner = "HowardHinnant";
repo = "date";
rev = "cc4685a21e4a4fdae707ad1233c61bbaff241f93";
sha256 = "KilhBEeLMvHtS76Gu0UhzE8lhS1+sCwQ1UL4pswKXTs=";
};
inherit src;
phases = [ "installPhase" ];
installPhase =
''
runHook preInstall
mkdir -p $out
cp -r $src/{include,src} $out
runHook postInstall
'';
}

View File

@@ -1,10 +1,10 @@
{ lib, pkgs }: with pkgs; rec
{ lib, pkgs, topInputs }: with pkgs; rec
{
typora = callPackage ./typora {};
vesta = callPackage ./vesta {};
oneapi = callPackage ./oneapi {};
rsshub = callPackage ./rsshub {};
misskey = callPackage ./misskey {};
rsshub = callPackage ./rsshub { src = topInputs.rsshub; };
misskey = callPackage ./misskey { nodejs = nodejs_21; src = topInputs.misskey; };
mk-meili-mgn = callPackage ./mk-meili-mgn {};
# vasp = callPackage ./vasp
# {
@@ -18,31 +18,35 @@
openmpi = pkgs.openmpi.override { cudaSupport = false; };
};
vaspkit = callPackage ./vaspkit { attrsToList = (import ../lib lib).attrsToList; };
v_sim = callPackage ./v_sim {};
concurrencpp = callPackage ./concurrencpp { stdenv = gcc13Stdenv; };
v-sim = callPackage ./v-sim { src = topInputs.v-sim; };
concurrencpp = callPackage ./concurrencpp { stdenv = gcc13Stdenv; src = topInputs.concurrencpp; };
eigengdb = python3Packages.callPackage ./eigengdb {};
nodesoup = callPackage ./nodesoup {};
matplotplusplus = callPackage ./matplotplusplus { inherit nodesoup glad; };
zpp-bits = callPackage ./zpp-bits {};
eigen = callPackage ./eigen {};
nameof = callPackage ./nameof {};
nodesoup = callPackage ./nodesoup { src = topInputs.nodesoup; };
matplotplusplus = callPackage ./matplotplusplus { inherit nodesoup glad; src = topInputs.matplotplusplus; };
zpp-bits = callPackage ./zpp-bits { src = topInputs.zpp-bits; };
eigen = callPackage ./eigen { src = topInputs.eigen; };
nameof = callPackage ./nameof { src = topInputs.nameof; };
pslist = callPackage ./pslist {};
glad = callPackage ./glad {};
chromiumos-touch-keyboard = callPackage ./chromiumos-touch-keyboard {};
yoga-support = callPackage ./yoga-support {};
tgbot-cpp = callPackage ./tgbot-cpp {};
tgbot-cpp = callPackage ./tgbot-cpp { src = topInputs.tgbot-cpp; };
biu = callPackage ./biu { inherit concurrencpp tgbot-cpp nameof; stdenv = gcc13Stdenv; };
citation-style-language = callPackage ./citation-style-language {};
citation-style-language = callPackage ./citation-style-language { src = topInputs.citation-style-language; };
mirism = callPackage ./mirism
{
inherit cppcoro nameof tgbot-cpp date;
nghttp2 = nghttp2-2305.override { enableAsioLib = true; };
};
cppcoro = callPackage ./cppcoro {};
date = callPackage ./date {};
cppcoro = callPackage ./cppcoro { src = topInputs.cppcoro; };
date = callPackage ./date { src = topInputs.date; };
esbonio = python3Packages.callPackage ./esbonio {};
pix2tex = python3Packages.callPackage ./pix2tex {};
pyreadline3 = python3Packages.callPackage ./pyreadline3 {};
torchdata = python3Packages.callPackage ./torchdata {};
torchtext = python3Packages.callPackage ./torchtext { inherit torchdata; };
win11os-kde = callPackage ./win11os-kde { src = topInputs.win11os-kde; };
fluent-kde = callPackage ./fluent-kde { src = topInputs.fluent-kde; };
blurred-wallpaper = callPackage ./blurred-wallpaper { src = topInputs.blurred-wallpaper; };
slate = callPackage ./slate { src = topInputs.slate; };
}

View File

@@ -1,12 +1,6 @@
{ lib, stdenv, fetchFromGitLab, cmake }: stdenv.mkDerivation rec
{ lib, stdenv, cmake, src }: stdenv.mkDerivation
{
name = "eigen";
src = fetchFromGitLab
{
owner = "libeigen";
repo = name;
rev = "6d829e766ff1b1ab867d93631163cbc63ed5798f";
sha256 = "BXUnizcRPrOyiPpoyYJ4VVOjlG49aj80mgzPKmEYPKU=";
};
inherit src;
nativeBuildInputs = [ cmake ];
}

View File

@@ -1,11 +1,11 @@
{ lib, fetchPypi, buildPythonPackage }: buildPythonPackage rec
{
pname = "esbonio";
version = "0.16.3";
version = "0.16.4";
src = fetchPypi
{
inherit pname version;
sha256 = "1ggxdzl95fy0zxpyd1pcylhif1x604wk4wy7sv9322hc84b708zx";
sha256 = "1MBNBLCEBD6HtlxEASc4iZaXYyNdih2MIHoxK84jMdI=";
};
doCheck = false;
}

View File

@@ -0,0 +1,22 @@
{ lib, stdenv, src }: stdenv.mkDerivation
{
name = "fluent-kde";
inherit src;
installPhase =
''
mkdir -p $out/share/aurorae/themes
cp -r $src/aurorae/* $out/share/aurorae/themes
mkdir -p $out/share/color-schemes
cp -r $src/color-schemes/*.colors $out/share/color-schemes
mkdir -p $out/share/Kvantum
cp -r $src/Kvantum/Fluent* $out/share/Kvantum
mkdir -p $out/share/plasma/desktoptheme
cp -r $src/plasma/desktoptheme/* $out/share/plasma/desktoptheme
mkdir -p $out/share/plasma/layout-templates
cp -r $src/plasma/layout-templates/* $out/share/plasma/layout-templates
mkdir -p $out/share/plasma/look-and-feel
cp -r $src/plasma/look-and-feel/com.github.vinceliuice.Fluent* $out/share/plasma/look-and-feel
mkdir -p $out/share/wallpapers
cp -r $src/wallpaper/* $out/share/wallpapers
'';
}

View File

@@ -1,17 +1,10 @@
{
stdenv, fetchFromGitHub, cmake, pkg-config, substituteAll,
stdenv, src, cmake, pkg-config, substituteAll,
gnuplot, libjpeg, libtiff, zlib, libpng, lapack, blas, fftw, opencv, nodesoup, cimg, glfw, libGL, python3, glad
}: stdenv.mkDerivation
{
pname = "matplotplusplus";
version = "1.2.0";
src = fetchFromGitHub
{
owner = "alandefreitas";
repo = "matplotplusplus";
rev = "a40344efa9dc5ea0c312e6e9ef4eb7238d98dc12";
sha256 = "6/dH/Rl2aAb8b+Ji5LwzkC+GWPOCBnYCrjy0qk8u/+I=";
};
name = "matplotplusplus";
inherit src;
cmakeFlags =
[
"-DBUILD_SHARED_LIBS=ON" "-DMATPLOTPP_BUILD_SHARED_LIBS=ON" "-DMATPLOTPP_BUILD_EXAMPLES=OFF"

View File

@@ -8,7 +8,7 @@
src = requireFile
{
inherit name;
sha256 = "1q3f4q4ln9dz68dfc35jybgv861f7acqiiykkm7jxviz8jdgn8c7";
sha256 = "0f50pvdafhlmrlbf341mkp9q50v4ld5pbx92d2w1633f18zghbzf";
hashMode = "recursive";
message = "Source file not found.";
};

View File

@@ -1,95 +1,36 @@
{
lib, stdenv, mkPnpmPackage, fetchFromGitHub, fetchurl, nodejs_20, writeShellScript, buildFHSEnv,
bash, cypress, vips, pkg-config
lib, stdenv, mkPnpmPackage, fetchurl, nodejs, writeShellScript, buildFHSEnv,
bash, cypress, vips, pkg-config, src
}:
let
pname = "misskey";
version = "2023.11.1";
src = fetchFromGitHub
{
owner = "CHN-beta";
repo = "misskey";
rev = "1e5134816cc23600a0448a62b34aadfe573c3bbc";
sha256 = "ihkFVTpwEELmxAw4Lw01pWr8j6u2oLpfcw3laVUFCO4=";
fetchSubmodules = true;
};
name = "misskey";
originalPnpmPackage = mkPnpmPackage
{
inherit pname version src;
nodejs = nodejs_20;
inherit name src nodejs;
copyPnpmStore = true;
};
startScript = writeShellScript "misskey"
''
export PATH=${lib.makeBinPath [ bash nodejs_20 nodejs_20.pkgs.pnpm nodejs_20.pkgs.gulp cypress ]}:$PATH
export PATH=${lib.makeBinPath [ bash nodejs nodejs.pkgs.pnpm nodejs.pkgs.gulp cypress ]}:$PATH
export CYPRESS_RUN_BINARY="${cypress}/bin/Cypress"
export NODE_ENV=production
pnpm run migrateandstart
'';
re2 = stdenv.mkDerivation rec
{
pname = "re2";
version = "1.20.8";
srcs =
[
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-120.br";
sha256 = "0f2l658xxc2112mbqpkyfic3vhjgdyafbfi14b6n40skyd6lijcq";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-120.gz";
sha256 = "1v5n8i16188xpwx1jr8gcc1a99v83hlbh5hldl4i376vh0lwsxlq";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-115.br";
sha256 = "0cyqmgqk5cwik27wh4ynaf94v4w6p1fsavm07xh8xfmdim2sr9kd";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-115.gz";
sha256 = "0i3iykw13d5qfd5s6pq6kx6cbd64vfb3w65f9bnj87qz44la84ic";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-108.br";
sha256 = "1467frfapqhi839r2v0p0wh76si3lihwzwgl9098mj7mwhjfl4lx";
})
(fetchurl
{
url = "https://github.com/uhop/node-re2/releases/download/1.20.8/linux-x64-108.gz";
sha256 = "0hykpqdrn55x83v1kzz6bdvrp24hgz3rwmwbdfl2saz576krzg1c";
})
];
phases = [ "installPhase" ];
installPhase =
''
mkdir -p $out/${version}
for i in $srcs
do
cp $i $out/${version}/''${i#*-}
done
'';
};
in
stdenv.mkDerivation rec
{
inherit version src pname;
inherit src name;
buildInputs =
[
bash nodejs_20 nodejs_20.pkgs.typescript nodejs_20.pkgs.pnpm nodejs_20.pkgs.gulp cypress vips pkg-config
bash nodejs nodejs.pkgs.typescript nodejs.pkgs.pnpm nodejs.pkgs.gulp cypress vips pkg-config
];
nativeBuildInputs = buildInputs;
CYPRESS_RUN_BINARY = "${cypress}/bin/Cypress";
NODE_ENV = "production";
RE2_DOWNLOAD_MIRROR = "${re2}";
RE2_DOWNLOAD_SKIP_PATH = "true";
configurePhase =
''
export HOME=$NIX_BUILD_TOP # Some packages need a writable HOME
export npm_config_nodedir=${nodejs_20}
export npm_config_nodedir=${nodejs}
runHook preConfigure
@@ -121,6 +62,6 @@ in
'';
passthru =
{
inherit originalPnpmPackage startScript re2;
inherit originalPnpmPackage startScript;
};
}

View File

@@ -1,14 +1,7 @@
{ lib, stdenv, fetchFromGitHub }: stdenv.mkDerivation rec
{ lib, stdenv, src }: stdenv.mkDerivation
{
pname = "nameof";
version = "0.10.3";
src = fetchFromGitHub
{
owner = "Neargye";
repo = pname;
rev = "v${version}";
sha256 = "eHG0Y/BQGbwTrBHjq9SeSiIXaVqWp7PxIq7vCIECYPk=";
};
name = "nameof";
inherit src;
phases = [ "installPhase" ];
installPhase =
''

View File

@@ -1,13 +1,7 @@
{ stdenv, fetchFromGitHub, cmake, pkg-config, cairo, pcre2, xorg }: stdenv.mkDerivation rec
{ stdenv, src, cmake, pkg-config, cairo, pcre2, xorg }: stdenv.mkDerivation
{
name = "nodesoup";
src = fetchFromGitHub
{
owner = "olvb";
repo = "nodesoup";
rev = "3158ad082bb0cd1abee75418b12b35522dbca74f";
sha256 = "tFLq6QC3U3uvcuWsdRy2wnwcmAfH2MkI2oMcAiUBHSo=";
};
inherit src;
buildInputs = [ cairo pcre2.dev xorg.libXdmcp.dev ];
nativeBuildInputs = [ cmake pkg-config ];
}

View File

@@ -1,16 +1,9 @@
{
lib, stdenv, mkPnpmPackage, fetchFromGitHub, nodejs, writeShellScript,
chromium, bash
lib, stdenv, mkPnpmPackage, nodejs, writeShellScript,
chromium, bash, src
}:
let
name = "rsshub";
src = fetchFromGitHub
{
owner = "DIYgod";
repo = "RSSHub";
rev = "38a5b0c193bf77d71c4eea33db6e76bc8b565d0b";
hash = "sha256-gJsT9W2fFiy2IG89E5th49DpBHsPMfsdONyzAKDG48c=";
};
originalPnpmPackage = mkPnpmPackage { inherit name src nodejs; };
nodeModules = originalPnpmPackage.nodeModules.overrideAttrs { PUPPETEER_SKIP_DOWNLOAD = true; };
rsshub-unwrapped = stdenv.mkDerivation

View File

@@ -0,0 +1,10 @@
{ stdenv, src }: stdenv.mkDerivation
{
name = "slate";
src = "${src}/Slate.tar.gz";
installPhase =
''
mkdir -p $out/share/yakuake/skins/Slate
cp -r * $out/share/yakuake/skins/Slate
'';
}

View File

@@ -1,14 +1,7 @@
{ stdenv, fetchFromGitHub, cmake, pkg-config, boost, openssl, zlib, curl }: stdenv.mkDerivation rec
{ stdenv, src, cmake, pkg-config, boost, openssl, zlib, curl }: stdenv.mkDerivation rec
{
pname = "tgbot-cpp";
version = "1.7.2";
src = fetchFromGitHub
{
owner = "reo7sp";
repo = "tgbot-cpp";
rev = "v${version}";
sha256 = "TKirSxEUqFB1WtzNEfU4EJK3p7V5xcFIvA2+QVX7TlA=";
};
name = "tgbot-cpp";
inherit src;
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ boost openssl zlib curl.dev ];
propagatedBuildInputs = buildInputs;

View File

@@ -3,11 +3,11 @@ let
typora-dist = stdenv.mkDerivation rec
{
pname = "typora-dist";
version = "1.7.6";
version = "1.8.2-dev";
src = fetchurl
{
url = "https://download.typora.io/linux/typora_${version}_amd64.deb";
sha256 = "19xgv83zk3mhniswwrb341sr9j4sb9pqy47jamrmkc3w8famxpd3";
sha256 = "0abi9m8h8k0228ajag26lxk756a7aqqixg608k85gnkdmibnq6mv";
};
dontFixup = true;

View File

@@ -1,19 +1,12 @@
{
stdenv, lib, fetchFromGitLab,
stdenv, lib, src,
wrapGAppsHook, autoreconfHook, autoconf, libtool, intltool, gettext, automake, gtk-doc, pkg-config, gfortran, libxslt,
glib, gtk3, epoxy, libyaml
}:
stdenv.mkDerivation
{
pname = "v_sim";
version = "3.8.0_p20230824";
src = fetchFromGitLab
{
owner = "l_sim";
repo = "v_sim";
rev = "8abc67b56795c19a8e2357d442b556c71d2441cb";
sha256 = "KQNd3BGvkZVsfIPVLEEMBptiFQYeCbWGR28ds2Y+w2Y=";
};
name = "v-sim";
inherit src;
buildInputs = [ glib gtk3 epoxy libyaml ];
nativeBuildInputs =
[

View File

@@ -0,0 +1,20 @@
{ lib, stdenv, src }: stdenv.mkDerivation
{
name = "win11os-kde";
inherit src;
installPhase =
''
mkdir -p $out/share/aurorae/themes
cp -r $src/aurorae/* $out/share/aurorae/themes
mkdir -p $out/share/color-schemes
cp -r $src/color-schemes/*.colors $out/share/color-schemes
mkdir -p $out/share/Kvantum
cp -r $src/Kvantum/* $out/share/Kvantum
mkdir -p $out/share/plasma/desktoptheme
cp -r $src/plasma/desktoptheme/* $out/share/plasma/desktoptheme
mkdir -p $out/share/plasma/look-and-feel
cp -r $src/plasma/look-and-feel/* $out/share/plasma/look-and-feel
mkdir -p $out/share/wallpapers
cp -r $src/wallpaper/* $out/share/wallpapers
'';
}

View File

@@ -1,14 +1,7 @@
{ stdenv, fetchFromGitHub }: stdenv.mkDerivation rec
{ stdenv, src }: stdenv.mkDerivation
{
pname = "zpp-bits";
version = "4.4.19";
src = fetchFromGitHub
{
owner = "eyalz800";
repo = "zpp_bits";
rev = "v${version}";
sha256 = "ejIwrvCFALuBQbQhTfzjBb11oMR/akKnboB60GWbjlQ=";
};
inherit src;
name = "zpp-bits";
phases = [ "installPhase" ];
installPhase =
''

View File

@@ -78,6 +78,9 @@ inputs:
};
};
firefox.programs.firefox.enable = inputs.lib.mkForce false;
power.boot.kernelParams = [ "cpufreq.default_governor=powersave" ];
backlight.boot.kernelParams = [ "nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1" ];
amdpstate.boot.kernelParams = [ "amd_pstate=active" ];
};
in
{

View File

@@ -31,11 +31,13 @@ inputs:
{
nix-vscode-extensions = topInputs.nix-vscode-extensions.extensions."${prev.system}";
nur-xddxdd = topInputs.nur-xddxdd.overlays.default final prev;
nur-linyinfeng = (topInputs.nur-linyinfeng.overlays.default final prev).linyinfeng;
deploy-rs =
{ inherit (prev) deploy-rs; inherit ((topInputs.deploy-rs.overlay final prev).deploy-rs) lib; };
# needed by mirism
nghttp2-2305 =
inputs.pkgs.callPackage "${inputs.topInputs.nixpkgs-2305}/pkgs/development/libraries/nghttp2" {};
firefox-addons = (import "${topInputs.rycee}" { inherit (prev) pkgs; }).firefox-addons;
})
];
home-manager.sharedModules =

View File

@@ -1,5 +1,6 @@
inputs:
{
imports = inputs.localLib.mkModules [ ./gpu.nix ./legion.nix ];
options.nixos.hardware = let inherit (inputs.lib) mkOption types; in
{
bluetooth.enable = mkOption { type = types.bool; default = false; };
@@ -7,14 +8,6 @@ inputs:
printer.enable = mkOption { type = types.bool; default = false; };
sound.enable = mkOption { type = types.bool; default = false; };
cpus = mkOption { type = types.listOf (types.enum [ "intel" "amd" ]); default = []; };
gpus = mkOption { type = types.listOf (types.enum [ "intel" "nvidia" "amd" ]); default = []; };
prime =
{
enable = mkOption { type = types.bool; default = false; };
mode = mkOption { type = types.enum [ "offload" "sync" ]; default = "offload"; };
busId = mkOption { type = types.attrsOf types.str; default = {}; };
};
gamemode.drmDevice = mkOption { type = types.int; default = 0; };
halo-keyboard.enable = mkOption { type = types.bool; default = false; };
};
config =
@@ -81,73 +74,6 @@ inputs:
concatLists (map (cpu: modules.${cpu}) hardware.cpus);
}
)
# gpus
(
mkIf (hardware.gpus != [])
{
boot.initrd.availableKernelModules =
let
modules =
{
intel = [ "i915" ];
nvidia = [ "nvidia" "nvidia_drm" "nvidia_modeset" "nvidia_uvm" ];
amd = [ "amdgpu" ];
};
in
concatLists (map (gpu: modules.${gpu}) hardware.gpus);
hardware =
{
opengl =
{
enable = true;
driSupport = true;
extraPackages =
with inputs.pkgs;
let
packages =
{
intel = [ intel-compute-runtime intel-media-driver libvdpau-va-gl ]; # intel-vaapi-driver
nvidia = [ vaapiVdpau ];
amd = [];
};
in
concatLists (map (gpu: packages.${gpu}) hardware.gpus);
driSupport32Bit = true;
};
nvidia.nvidiaSettings = builtins.elem "nvidia" hardware.gpus;
};
}
)
(mkIf (builtins.elem "intel" hardware.gpus) { services.xserver.deviceSection = ''Driver "modesetting"''; })
# prime
(
mkIf hardware.prime.enable
{
hardware.nvidia = mkMerge
[
(
mkIf (hardware.prime.mode == "offload")
{
prime.offload = { enable = true; enableOffloadCmd = true; };
powerManagement = { finegrained = true; enable = true; };
}
)
(
mkIf (hardware.prime.mode == "sync")
{
prime = { sync.enable = true; };
# prime.forceFullCompositionPipeline = true;
}
)
{
prime = listToAttrs
(map (gpu: { inherit (gpu) value; name = "${gpu.name}BusId"; }) (attrsToList hardware.prime.busId));
}
];
}
)
{ programs.gamemode.settings.gpu.gpu_device = "${toString hardware.gamemode.drmDevice}"; }
# halo-keyboard
(mkIf hardware.halo-keyboard.enable
(

80
modules/hardware/gpu.nix Normal file
View File

@@ -0,0 +1,80 @@
inputs:
{
options.nixos.hardware.gpu = let inherit (inputs.lib) mkOption types; in
{
type = mkOption
{
type = types.nullOr (types.enum
[
# single gpu
"intel" "nvidia" "amd"
# hibrid gpu: use nvidia prime offload mode
"intel+nvidia" "amd+nvidia"
]);
default = null;
};
prime.busId = mkOption { type = types.attrsOf types.nonEmptyStr; default = {}; };
};
config = let inherit (inputs.config.nixos.hardware) gpu; in inputs.lib.mkIf (gpu.type != null) (inputs.lib.mkMerge
[
# generic settings
(
let gpus = inputs.lib.strings.splitString "+" gpu.type; in
{
boot.initrd.availableKernelModules =
let modules =
{
intel = [ "i915" ];
nvidia = [ "nvidia" "nvidia_drm" "nvidia_modeset" "nvidia_uvm" ];
amd = [ "amdgpu" ];
};
in builtins.concatLists (builtins.map (gpu: modules.${gpu}) gpus);
hardware =
{
opengl =
{
enable = true;
driSupport = true;
driSupport32Bit = true;
extraPackages =
let packages = with inputs.pkgs;
{
intel = [ intel-vaapi-driver libvdpau-va-gl intel-media-driver ];
nvidia = [ vaapiVdpau ];
amd = [ amdvlk rocmPackages.clr rocmPackages.clr.icd ];
};
in builtins.concatLists (builtins.map (gpu: packages.${gpu}) gpus);
extraPackages32 =
let packages = { intel = []; nvidia = []; amd = [ inputs.pkgs.driversi686Linux.amdvlk ]; };
in builtins.concatLists (builtins.map (gpu: packages.${gpu}) gpus);
};
nvidia = inputs.lib.mkIf (builtins.elem "nvidia" gpus)
{
modesetting.enable = true;
powerManagement.enable = true;
dynamicBoost.enable = true;
nvidiaSettings = true;
# package = inputs.config.boot.kernelPackages.nvidiaPackages.production;
};
};
boot.kernelParams = inputs.lib.mkIf (builtins.elem "amd" gpus)
[ "radeon.cik_support=0" "amdgpu.cik_support=1" "radeon.si_support=0" "amdgpu.si_support=1" "iommu=pt" ];
environment.variables.VDPAU_DRIVER = inputs.lib.mkIf (builtins.elem "intel" gpus) "va_gl";
services.xserver.videoDrivers =
let driver = { intel = "modesetting"; amd = "amdgpu"; nvidia = "nvidia"; };
in builtins.map (gpu: driver.${gpu}) gpus;
}
)
# nvidia prime offload
(
inputs.lib.mkIf (inputs.lib.strings.hasSuffix "+nvidia" gpu.type) { hardware.nvidia =
{
prime = { offload = { enable = true; enableOffloadCmd = true; }; }
// builtins.listToAttrs (builtins.map
(gpu: { name = "${if gpu.name == "amd" then "amdgpu" else gpu.name}BusId"; value = "PCI:${gpu.value}"; })
(inputs.localLib.attrsToList gpu.prime.busId));
powerManagement.finegrained = true;
};}
)
]);
}

View File

@@ -0,0 +1,16 @@
inputs:
{
options.nixos.hardware.legion = let inherit (inputs.lib) mkOption types; in
{
enable = mkOption { type = types.bool; default = false; };
};
config =
let
inherit (inputs.lib) mkIf;
inherit (inputs.config.nixos.hardware) legion;
in mkIf legion.enable
{
environment.systemPackages = [ inputs.pkgs.lenovo-legion ];
boot.extraModulePackages = [ inputs.config.boot.kernelPackages.lenovo-legion-module ];
};
}

View File

@@ -3,6 +3,7 @@ inputs:
imports = inputs.localLib.mkModules
[
./chromium.nix
./steam.nix
];
config =
let
@@ -16,7 +17,7 @@ inputs:
_packages =
[
# system management
etcher btrfs-assistant snapper-gui libsForQt5.qtstyleplugin-kvantum
etcher btrfs-assistant snapper-gui libsForQt5.qtstyleplugin-kvantum ventoy-full
# password and key management
yubikey-manager yubikey-manager-qt yubikey-personalization yubikey-personalization-gui bitwarden
# download
@@ -24,7 +25,8 @@ inputs:
# development
scrcpy weston cage openbox krita
# media
spotify yesplaymusic simplescreenrecorder imagemagick gimp netease-cloud-music-gtk vlc
spotify yesplaymusic simplescreenrecorder imagemagick gimp netease-cloud-music-gtk vlc obs-studio
waifu2x-converter-cpp inkscape blender
# editor
localPackages.typora
# themes
@@ -32,16 +34,20 @@ inputs:
# news
fluent-reader
# nix tools
deploy-rs.deploy-rs nixpkgs-fmt
deploy-rs.deploy-rs nixpkgs-fmt appimage-run nixd nix-serve node2nix nix-prefetch-github prefetch-npm-deps
nix-prefetch-docker
# instant messager
element-desktop telegram-desktop discord fluffychat
element-desktop telegram-desktop discord fluffychat zoom-us signal-desktop slack nur-linyinfeng.wemeet
# browser
google-chrome
# office
crow-translate zotero pandoc ydict
crow-translate zotero pandoc ydict libreoffice-qt texstudio poppler_utils pdftk gnuplot pdfchain hdfview
(texlive.combine { inherit (texlive) scheme-full; inherit (localPackages) citation-style-language; })
# math, physics and chemistry
octaveFull root ovito localPackages.vesta localPackages.vaspkit localPackages.v-sim
] ++ (with inputs.lib; filter isDerivation (attrValues plasma5Packages.kdeGear));
};
};
programs = { steam.enable = true; kdeconnect.enable = true; };
programs.kdeconnect.enable = true;
};
}

View File

@@ -0,0 +1,23 @@
inputs:
{
config =
let
inherit (inputs.lib) mkIf;
in mkIf (builtins.elem "desktop-fat" inputs.config.nixos.packages._packageSets)
{
programs.steam =
{
enable = true;
package = inputs.pkgs.steam.override (prev:
{
steam = prev.steam.overrideAttrs (prev:
{
postInstall = prev.postInstall +
''
sed -i 's#Comment\[zh_CN\]=.*$#Comment\[zh_CN\]=®#' $out/share/applications/steam.desktop
'';
});
});
};
};
}

View File

@@ -1,6 +1,6 @@
inputs:
{
imports = inputs.localLib.mkModules [ ./vscode.nix ];
imports = inputs.localLib.mkModules [ ./vscode.nix ./firefox.nix ];
config =
let
inherit (inputs.lib) mkIf;
@@ -11,30 +11,46 @@ inputs:
packages._packages = with inputs.pkgs;
[
# system management
gparted wl-clipboard-x11 kio-fuse
wayland-utils clinfo glxinfo vulkan-tools dracut
gparted kio-fuse wayland-utils clinfo glxinfo vulkan-tools dracut
(
writeShellScriptBin "xclip"
''
#!${bash}/bin/bash
if [ "$XDG_SESSION_TYPE" = "x11" ]; then
exec ${xclip}/bin/xclip "$@"
else
exec ${wl-clipboard-x11}/bin/xclip "$@"
fi
''
)
# color management
argyllcms xcalib
# networking
remmina putty mtr-gui
# media
mpv nomacs
# themes
tela-circle-icon-theme
tela-circle-icon-theme localPackages.win11os-kde localPackages.fluent-kde localPackages.blurred-wallpaper
localPackages.slate utterly-nord-plasma
];
users.sharedModules =
[{
config.home.file.".config/baloofilerc".text =
''
[Basic Settings]
Indexing-Enabled=false
'';
}];
[(homeInputs: {
config.home.file = mkIf (!homeInputs.config.programs.plasma.enable)
{
".config/baloofilerc".text =
''
[Basic Settings]
Indexing-Enabled=false
'';
};
})];
};
programs =
{
adb.enable = true;
wireshark = { enable = true; package = inputs.pkgs.wireshark; };
firefox = { enable = true; languagePacks = [ "zh-CN" "en-US" ]; };
vim.package = inputs.pkgs.vim-full;
yubikey-touch-detector.enable = true;
};
nixpkgs.config.packageOverrides = pkgs:
{

View File

@@ -0,0 +1,58 @@
inputs:
{
config = inputs.lib.mkIf (builtins.elem "desktop" inputs.config.nixos.packages._packageSets)
{
nixos.users.sharedModules = [{ config =
{
programs.firefox =
{
enable = true;
# TODO: switch to 24.05
# nativeMessagingHosts = [ inputs.pkgs.plasma-browser-integration ];
package = inputs.pkgs.firefox.override { nativeMessagingHosts = [ inputs.pkgs.plasma-browser-integration ]; };
policies.DefaultDownloadDirectory = "\${home}/Downloads";
profiles.default =
{
extensions = with inputs.pkgs.firefox-addons;
[
immersive-translate tampermonkey bitwarden cookies-txt dualsub firefox-color i-dont-care-about-cookies
metamask pakkujs switchyomega rsshub-radar rsspreview tabliss tree-style-tab ublock-origin wallabagger
wappalyzer grammarly
(
buildFirefoxXpiAddon
{
pname = "zotero-connector";
version = "5.0.114";
addonId = "zotero@chnm.gmu.edu";
url = "https://download.zotero.org/connector/firefox/release/Zotero_Connector-5.0.114.xpi";
sha256 = "1g9d991m4vfj5x6r86sw754bx7r4qi8g5ddlqp7rcw6wrgydhrhw";
meta = {};
}
)
];
search = { default = "Google"; force = true; };
userChrome = builtins.concatStringsSep "\n" (builtins.map
(file: builtins.readFile "${inputs.topInputs.cascade}/chrome/includes/cascade-${file}.css")
[ "config-mouse" "colours" "layout" "responsive" "floating-panel" "nav-bar" "tabs" ]);
settings =
{
# general
"browser.search.region" = "CN";
"intl.locale.requested" = "zh-CN,en-US";
"browser.aboutConfig.showWarning" = false;
"browser.bookmarks.showMobileBookmarks" = true;
"browser.download.panel.shown" = true;
"browser.download.useDownloadDir" = true;
"browser.newtab.extensionControlled" = true;
"browser.toolbars.bookmarks.visibility" = "never";
# allow to apply userChrome.css
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
};
};
};
home.file.".mozilla/firefox/profiles.ini".force = true;
};}];
# still enable global firefox, to install language packs
programs.firefox = { enable = true; languagePacks = [ "zh-CN" "en-US" ]; };
};
}

View File

@@ -44,6 +44,8 @@ inputs:
lextudio.restructuredtext trond-snekvik.simple-rst
# markdown
shd101wyy.markdown-preview-enhanced
# vasp
mystery.vasp-support
];
}
)];

View File

@@ -3,6 +3,8 @@ inputs:
imports = inputs.localLib.mkModules
[
./ssh
./zsh
./gpg.nix
];
config =
let
@@ -15,7 +17,7 @@ inputs:
{
packages = with inputs.pkgs;
{
_packages =
_packages =
[
# shell
ksh
@@ -23,7 +25,7 @@ inputs:
beep dos2unix gnugrep pv tmux screen parallel tldr cowsay jq zellij neofetch ipfetch localPackages.pslist
fastfetch reptyr
# lsxx
pciutils usbutils lshw util-linux lsof
pciutils usbutils lshw util-linux lsof dmidecode
# top
iotop iftop htop btop powertop s-tui
# editor
@@ -47,70 +49,18 @@ inputs:
# office
todo-txt-cli
# development
gdb try inputs.topInputs.plasma-manager.packages.x86_64-linux.rc2nix
gdb try inputs.topInputs.plasma-manager.packages.x86_64-linux.rc2nix hexo-cli
] ++ (with inputs.config.boot.kernelPackages; [ cpupower usbip ]);
_pythonPackages = [(pythonPackages: with pythonPackages;
[
openai python-telegram-bot fastapi pypdf2 pandas matplotlib plotly gunicorn redis jinja2
certifi charset-normalizer idna orjson psycopg2 inquirerpy requests tqdm
])];
};
users.sharedModules = [(home-inputs:
{
config.programs =
{
zsh =
{
enable = true;
initExtraBeforeCompInit =
''
# p10k instant prompt
P10K_INSTANT_PROMPT="$XDG_CACHE_HOME/p10k-instant-prompt-''${(%):-%n}.zsh"
[[ ! -r "$P10K_INSTANT_PROMPT" ]] || source "$P10K_INSTANT_PROMPT"
HYPHEN_INSENSITIVE="true"
export PATH=~/bin:$PATH
function br
{
local cmd cmd_file code
cmd_file=$(mktemp)
if broot --outcmd "$cmd_file" "$@"; then
cmd=$(<"$cmd_file")
command rm -f "$cmd_file"
eval "$cmd"
else
code=$?
command rm -f "$cmd_file"
return "$code"
fi
}
alias todo="todo.sh"
'';
plugins =
[
{
file = "powerlevel10k.zsh-theme";
name = "powerlevel10k";
src = "${inputs.pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k";
}
{
file = "p10k.zsh";
name = "powerlevel10k-config";
src = ./p10k-config;
}
{
name = "zsh-lsd";
src = inputs.pkgs.fetchFromGitHub
{
owner = "z-shell";
repo = "zsh-lsd";
rev = "029a9cb0a9b39c9eb6c5b5100dd9182813332250";
sha256 = "sha256-oWjWnhiimlGBMaZlZB+OM47jd9hporKlPNwCx6524Rk=";
};
}
];
history =
{
path = "${home-inputs.config.xdg.dataHome}/zsh/zsh_history";
extended = true;
save = 100000000;
size = 100000000;
};
};
direnv = { enable = true; nix-direnv.enable = true; };
git =
{
@@ -163,21 +113,7 @@ inputs:
{
nix-index-database.comma.enable = true;
nix-index.enable = true;
zsh =
{
enable = true;
syntaxHighlighting.enable = true;
autosuggestions.enable = true;
enableCompletion = true;
ohMyZsh =
{
enable = true;
plugins = [ "git" "colored-man-pages" "extract" "history-substring-search" "autojump" ];
customPkgs = with inputs.pkgs; [ zsh-nix-shell ];
};
};
command-not-found.enable = false;
gnupg.agent = { enable = true; enableSSHSupport = true; };
autojump.enable = true;
git =
{

View File

@@ -0,0 +1,10 @@
inputs:
{
config =
let
inherit (inputs.lib) mkIf;
in mkIf (builtins.elem "server" inputs.config.nixos.packages._packageSets)
{
programs.gnupg.agent = { enable = true; pinentryFlavor = "tty"; };
};
}

View File

@@ -41,6 +41,11 @@ inputs:
ed25519 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAoMu0HEaFQsnlJL0L6isnkNZdRq0OiDXyaX3+fl3NjT";
hostnames = [ "initrd.nas.chn.moe" "[office.chn.moe]:5440" "192.168.1.185" ];
};
surface =
{
ed25519 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFdm3DcfHdcLP0oSpVrWwIZ/b9lZuakBSPwCFz2BdTJ7";
hostnames = [ "192.168.1.166" ];
};
pc =
{
ed25519 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMSfREi19OSwQnhdsE8wiNwGSFFJwNGN0M5gN+sdrrLJ";
@@ -96,8 +101,16 @@ inputs:
else []
))
(attrsToList servers)));
programs.ssh =
{
startAgent = true;
enableAskPassword = true;
askPassword = "${inputs.pkgs.systemd}/bin/systemd-ask-password";
extraConfig = "AddKeysToAgent yes";
};
environment.sessionVariables.SSH_ASKPASS_REQUIRE = "prefer";
nixos.users.sharedModules =
[{
[(hmInputs: {
config.programs.ssh =
{
enable = true;
@@ -122,12 +135,27 @@ inputs:
{
PubkeyAcceptedAlgorithms = "+ssh-rsa";
HostkeyAlgorithms = "+ssh-rsa";
SetEnv = "TERM=chn_unset_ls_colors:xterm-256color";
SetEnv =
let
usernameMap =
{
chn = "linwei/chn";
};
cdString =
if host == "jykang" && (usernameMap ? ${hmInputs.config.home.username}) then
":chn_cd:${usernameMap.${hmInputs.config.home.username}}"
else "";
in "TERM=chn_unset_ls_colors${cdString}:xterm-256color";
# in .bash_profile:
# if [[ $TERM == chn_unset_ls_colors* ]]; then
# export TERM=${TERM#*:}
# export CHN_LS_USE_COLOR=1
# fi
# if [[ $TERM == chn_cd* ]]; then
# export TERM=${TERM#*:}
# cd ~/${TERM%%:*}
# export TERM=${TERM#*:}
# fi
# in .bashrc
# [ -n "$CHN_LS_USE_COLOR" ] && alias ls="ls --color=auto"
};
@@ -138,9 +166,10 @@ inputs:
// {
xmupc1 = { host = "xmupc1"; hostname = "office.chn.moe"; port = 6007; };
nas = { host = "nas"; hostname = "office.chn.moe"; port = 5440; };
surface = { host = "surface"; hostname = "192.168.1.166"; };
gitea = { host = "gitea"; hostname = "ssh.git.chn.moe"; };
};
};
}];
})];
};
}

View File

@@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDJAyDl52UVGFPTV/rXFERrXAMY5qZ3g+tpg9HOGdw86G4Nr8Xp/cTxZjF4kSfIkSrGblAV9Lm4US0fW3pGOQu5qQrSAENxqHxdlEyzt7izyF2CklDUeTjs3KHOIZMvSli4z014NPcswBbjwB9Lyrw0fCQ9P1vYkrUHEzL2SMxdack1EQPcMF4MxblDqc+eQhdMCkKE8T1Cb1ZqxeLVMPn9CwjG18JoxL+/xs+MjcsSXYWcoqYTfgfhguMbh0D4Eo32MHS/IzRSxnOHJxhG5xYePcyBlb/CxQuYA+RTqKNE85j7GcL2oEmeZ1b++/9qFT9grwVh+UOBRO2xiMzKDF24nXPJ+eLyd6Z/3swGT4rTVDnrXV5eZUkWLHN093IdLJCTtPVrKV9OxEKr5sU2W0edpirNrlGq7/MYkJX9EbQctDFA69XfQkZlGK9xGutqSgEaVlY54fS0Due+NDrNBPfMKJ9MTmFDOY+NYn05El2rMD39OKbGbCR5ASwSSBlcQeE=

View File

@@ -0,0 +1,78 @@
inputs:
{
config =
let
inherit (inputs.lib) mkIf;
in mkIf (builtins.elem "server" inputs.config.nixos.packages._packageSets)
{
nixos.users.sharedModules = [(home-inputs: { config.programs.zsh =
{
enable = true;
initExtraBeforeCompInit =
''
# p10k instant prompt
P10K_INSTANT_PROMPT="$XDG_CACHE_HOME/p10k-instant-prompt-''${(%):-%n}.zsh"
[[ ! -r "$P10K_INSTANT_PROMPT" ]] || source "$P10K_INSTANT_PROMPT"
HYPHEN_INSENSITIVE="true"
export PATH=~/bin:$PATH
function br
{
local cmd cmd_file code
cmd_file=$(mktemp)
if broot --outcmd "$cmd_file" "$@"; then
cmd=$(<"$cmd_file")
command rm -f "$cmd_file"
eval "$cmd"
else
code=$?
command rm -f "$cmd_file"
return "$code"
fi
}
alias todo="todo.sh"
'';
plugins =
[
{
file = "powerlevel10k.zsh-theme";
name = "powerlevel10k";
src = "${inputs.pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k";
}
{
file = "p10k.zsh";
name = "powerlevel10k-config";
src = ./p10k-config;
}
{
name = "zsh-lsd";
src = inputs.pkgs.fetchFromGitHub
{
owner = "z-shell";
repo = "zsh-lsd";
rev = "65bb5ac49190beda263aae552a9369127961632d";
hash = "sha256-JSNsfpgiqWhtmGQkC3B0R1Y1QnDKp9n0Zaqzjhwt7Xk=";
};
}
];
history =
{
path = "${home-inputs.config.xdg.dataHome}/zsh/zsh_history";
extended = true;
save = 100000000;
size = 100000000;
};
};})];
programs.zsh =
{
enable = true;
syntaxHighlighting.enable = true;
autosuggestions.enable = true;
enableCompletion = true;
ohMyZsh =
{
enable = true;
plugins = [ "git" "colored-man-pages" "extract" "history-substring-search" "autojump" ];
};
};
};
}

View File

@@ -14,27 +14,21 @@ inputs:
# password and key management
electrum jabref
# system management
wl-mirror ventoy-full
wl-mirror
# nix tools
nix-template appimage-run nil nixd nix-alien nix-serve node2nix nix-prefetch-github prefetch-npm-deps
nix-prefetch-docker pnpm-lock-export bundix
nix-template nil nix-alien pnpm-lock-export bundix
# instant messager
zoom-us signal-desktop qq nur-xddxdd.wechat-uos slack inputs.config.nur.repos.linyinfeng.wemeet
cinny-desktop nheko
# office
libreoffice-qt texstudio poppler_utils pdftk gnuplot pdfchain hdfview
(texlive.combine { inherit (texlive) scheme-full; inherit (localPackages) citation-style-language; })
qq nur-xddxdd.wechat-uos cinny-desktop nheko
# development
jetbrains.clion android-studio dbeaver cling clang-tools_16 ccls fprettify aircrack-ng
# media
nur-xddxdd.svp obs-studio waifu2x-converter-cpp inkscape blender
nur-xddxdd.svp
# virtualization
wineWowPackages.stagingFull virt-viewer bottles # wine64
# text editor
appflowy notion-app-enhanced joplin-desktop standardnotes logseq
# math, physics and chemistry
mathematica octaveFull root ovito paraview localPackages.vesta qchem.quantum-espresso
localPackages.vasp localPackages.vaspkit jmol localPackages.v_sim
mathematica paraview localPackages.vasp jmol # qchem.quantum-espresso
# encryption and password management
john crunch hashcat
# container and vm
@@ -43,13 +37,11 @@ inputs:
microsoft-edge
# news
rssguard newsflash newsboat
yuzu-early-access
];
_pythonPackages = [(pythonPackages: with pythonPackages;
[
phonopy tensorflow keras openai scipy scikit-learn jupyterlab autograd
# localPackages.pix2tex
inquirerpy requests python-telegram-bot tqdm fastapi pypdf2 pandas matplotlib plotly gunicorn redis jinja2
certifi charset-normalizer idna orjson psycopg2 localPackages.eigengdb
phonopy tensorflow keras scipy scikit-learn jupyterlab autograd # localPackages.pix2tex
])];
_prebuildPackages =
[
@@ -76,29 +68,7 @@ inputs:
anime-game-launcher = { enable = true; package = inputs.pkgs.anime-game-launcher; };
honkers-railway-launcher = { enable = true; package = inputs.pkgs.honkers-railway-launcher; };
nix-ld.enable = true;
gamemode =
{
enable = true;
settings =
{
general.renice = 10;
gpu =
{
apply_gpu_optimisations = "accept-responsibility";
nv_powermizer_mode = 1;
};
custom = let notify-send = "${inputs.pkgs.libnotify}/bin/notify-send"; in
{
start = "${notify-send} 'GameMode started'";
end = "${notify-send} 'GameMode ended'";
};
};
};
chromium =
{
enable = true;
extraOpts.PasswordManagerEnabled = false;
};
chromium = { enable = true; extraOpts.PasswordManagerEnabled = false; };
};
};
}

View File

@@ -8,8 +8,14 @@ inputs:
type = types.attrsOf (types.oneOf
[
types.nonEmptyStr
(types.submodule { options =
{ device = mkOption { type = types.nonEmptyStr; }; hashTableSizeMB = mkOption { type = types.int; }; };})
(types.submodule
{
options =
{
device = mkOption { type = types.nonEmptyStr; };
hashTableSizeMB = mkOption { type = types.ints.unsigned; default = 1024; };
threads = mkOption { type = types.ints.unsigned; default = 1; };
};})
]);
default = {};
};
@@ -30,7 +36,7 @@ inputs:
{
spec = instance.value.device or instance.value;
hashTableSizeMB = instance.value.hashTableSizeMB or 1024;
extraOptions = [ "--thread-count" "1" "--scan-mode" "3" ];
extraOptions = [ "--thread-count" "${toString instance.value.threads or 1}" "--scan-mode" "3" ];
};
})
(attrsToList beesd.instances));

View File

@@ -40,6 +40,7 @@ inputs:
./fail2ban.nix
./wireguard.nix
./akkoma.nix
./gamemode.nix
];
options.nixos.services = let inherit (inputs.lib) mkOption types; in
{

View File

@@ -23,5 +23,6 @@ inputs:
serif = [ "Noto Serif CJK SC" "Source Han Serif SC" "DejaVu Serif" ];
};
};
nixos.users.sharedModules = [{ config.xdg.configFile."fontconfig/conf.d/10-hm-fonts.conf".force = true; }];
};
}

View File

@@ -113,6 +113,7 @@ inputs:
type = "stcp";
transport.useCompression = true;
secretKey = inputs.config.sops.placeholder."frp/stcp/${stcp.name}";
allowUsers = [ "*" ];
inherit (stcp.value) localIp localPort;
})
(attrsToList frpClient.stcp));

View File

@@ -0,0 +1,30 @@
inputs:
{
options.nixos.services.gamemode = let inherit (inputs.lib) mkOption types; in
{
enable = mkOption { type = types.bool; default = false; };
drmDevice = mkOption { type = types.int; };
};
config = let inherit (inputs.config.nixos.services) gamemode; in inputs.lib.mkIf gamemode.enable
{
programs.gamemode =
{
enable = true;
settings =
{
general.renice = 10;
gpu =
{
apply_gpu_optimisations = "accept-responsibility";
nv_powermizer_mode = 1;
gpu_device = builtins.toString gamemode.drmDevice;
};
custom = let notify-send = "${inputs.pkgs.libnotify}/bin/notify-send"; in
{
start = "${notify-send} 'GameMode started'";
end = "${notify-send} 'GameMode ended'";
};
};
};
};
}

View File

@@ -32,6 +32,8 @@ inputs:
User = inputs.config.users.users.mirism.name;
Group = inputs.config.users.users.mirism.group;
ExecStart = "${inputs.pkgs.localPackages.mirism}/bin/${instance}";
RuntimeMaxSec = "1d";
Restart = "always";
};
};
})

View File

@@ -89,7 +89,7 @@ inputs:
user: misskey_${replaceStrings [ "-" ] [ "_" ] instance.name}
pass: ${placeholder."postgresql/misskey_${replaceStrings [ "-" ] [ "_" ] instance.name}"}
extra:
statement_timeout: 60000
statement_timeout: 600000
dbReplications: false
redis:
host: 127.0.0.1

View File

@@ -7,15 +7,16 @@ inputs:
config =
let
inherit (inputs.config.nixos.services.nginx.applications) main;
in
inherit (inputs.lib) mkIf;
in mkIf main.enable
{
nixos.services.nginx.https."chn.moe".location =
{
"/".return.return = "302 https://xn--s8w913fdga.chn.moe/@chn";
"/.well-known/matrix/server".proxy =
{
setHeaders.Host = "synapse.chn.moe";
upstream = "https://synapse.chn.moe";
setHeaders.Host = "matrix.chn.moe";
upstream = "https://matrix.chn.moe";
};
};
};

View File

@@ -3,22 +3,32 @@ inputs:
{
options.nixos.services.synapse.instances = let inherit (inputs.lib) mkOption types; in mkOption
{
type = types.attrsOf (types.submodule { options =
type = types.attrsOf (types.submodule (submoduleInputs: { options =
{
autoStart = mkOption { type = types.bool; default = true; };
port = mkOption { type = types.ints.unsigned; default = 8008; };
redisPort = mkOption { type = types.ints.unsigned; default = 6379; };
hostname = mkOption { type = types.nonEmptyStr; default = "synapse.chn.moe"; };
slidingSyncPort = mkOption { type = types.ints.unsigned; default = 9000; };
hostname = mkOption
{
type = types.nonEmptyStr;
default = "${submoduleInputs.config._module.args.name}.chn.moe";
};
matrixHostname = mkOption { type = types.nonEmptyStr; default = "chn.moe"; };
slidingSyncHostname = mkOption
{
type = types.nonEmptyStr;
default = "syncv3.${submoduleInputs.config.hostname}";
};
# , synapse_homeserver --config-path homeserver.yaml --generate-config --report-stats=yes --server-name xxx
};});
};}));
default = {};
};
config =
let
inherit (inputs.config.nixos.services) synapse;
inherit (inputs.lib) mkIf mkMerge;
inherit (builtins) map listToAttrs replaceStrings;
inherit (builtins) map listToAttrs replaceStrings concatLists;
inherit (inputs.localLib) attrsToList;
in
{
@@ -40,162 +50,208 @@ inputs:
systemd = mkMerge (map
(instance: let workdir = "/var/lib/synapse/${instance.name}"; in
{
services."synapse-${instance.name}" =
let
package = inputs.pkgs.matrix-synapse.override
{ extras = [ "url-preview" "postgres" "redis" ]; plugins = []; };
config = inputs.config.sops.templates."synapse/${instance.name}.yaml".path;
homeserver = "${package}/bin/synapse_homeserver";
in
services =
{
"synapse-${instance.name}" =
let
package = inputs.pkgs.matrix-synapse.override
{ extras = [ "url-preview" "postgres" "redis" ]; plugins = []; };
config = inputs.config.sops.templates."synapse/${instance.name}/config.yaml".path;
homeserver = "${package}/bin/synapse_homeserver";
in
{
description = "synapse-${instance.name}";
enable = instance.value.autoStart;
after = [ "network-online.target" "postgresql.service" ];
requires = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig =
{
ExecStart = "${homeserver} --config-path ${config} --keys-directory ${workdir}";
Type = "notify";
User = "synapse-${instance.name}";
Group = "synapse-${instance.name}";
WorkingDirectory = workdir;
ExecReload = "${inputs.pkgs.util-linux}/bin/kill -HUP $MAINPID";
Restart = "on-failure";
UMask = "0077";
CapabilityBoundingSet = [ "" ];
# hardening
LockPersonality = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
ReadWritePaths = [ workdir ];
RemoveIPC = true;
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" ];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [ "@system-service" "~@resources" "~@privileged" ];
};
};
"synapse-sliding-sync-${instance.name}" =
{
description = "synapse-${instance.name}";
enable = instance.value.autoStart;
after = [ "network-online.target" "postgresql.service" ];
requires = [ "postgresql.service" ];
after = [ "synapse-${instance.name}.service" ];
wants = [ "synapse-${instance.name}.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig =
{
ExecStart = "${homeserver} --config-path ${config} --keys-directory ${workdir}";
Type = "notify";
User = "synapse-${instance.name}";
Group = "synapse-${instance.name}";
WorkingDirectory = workdir;
ExecReload = "${inputs.pkgs.util-linux}/bin/kill -HUP $MAINPID";
EnvironmentFile = inputs.config.sops.templates."synapse/${instance.name}-sliding-sync/env".path;
ExecStart = inputs.lib.getExe inputs.pkgs.matrix-sliding-sync;
WorkingDirectory = workdir + "-sliding-sync";
Restart = "on-failure";
UMask = "0077";
CapabilityBoundingSet = [ "" ];
# hardening
LockPersonality = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
ReadWritePaths = [ workdir ];
RemoveIPC = true;
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" ];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [ "@system-service" "~@resources" "~@privileged" ];
RestartSec = "1s";
};
};
};
tmpfiles.rules =
[
"d /var/lib/synapse 0755 root root"
"d ${workdir} 0700 synapse-${instance.name} synapse-${instance.name}"
"Z ${workdir} - synapse-${instance.name} synapse-${instance.name}"
"d ${workdir}-sliding-sync 0700 synapse-${instance.name} synapse-${instance.name}"
"Z ${workdir}-sliding-sync - synapse-${instance.name} synapse-${instance.name}"
];
})
(attrsToList synapse.instances));
sops = mkMerge (map
(instance:
{
templates."synapse/${instance.name}.yaml" =
templates =
{
owner = "synapse-${instance.name}";
group = "synapse-${instance.name}";
content =
let
inherit (inputs.config.sops) placeholder;
in builtins.readFile ((inputs.pkgs.formats.yaml {}).generate "${instance.name}.yaml"
{
server_name = instance.value.matrixHostname;
public_baseurl = "https://${instance.value.hostname}";
listeners =
[{
bind_addresses = [ "127.0.0.1" ];
inherit (instance.value) port;
resources = [{ names = [ "client" "federation" ]; compress = false; }];
tls = false;
type = "http";
x_forwarded = true;
}];
database =
"synapse/${instance.name}/config.yaml" =
{
owner = "synapse-${instance.name}";
group = "synapse-${instance.name}";
content =
let
inherit (inputs.config.sops) placeholder;
in builtins.readFile ((inputs.pkgs.formats.yaml {}).generate "${instance.name}.yaml"
{
name = "psycopg2";
args =
server_name = instance.value.matrixHostname;
public_baseurl = "https://${instance.value.hostname}/";
listeners =
[{
bind_addresses = [ "127.0.0.1" ];
inherit (instance.value) port;
resources = [{ names = [ "client" "federation" ]; compress = false; }];
tls = false;
type = "http";
x_forwarded = true;
}];
database =
{
user = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
password = placeholder."postgresql/synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
database = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
host = "127.0.0.1";
port = "5432";
name = "psycopg2";
args =
{
user = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
password = placeholder."postgresql/synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
database = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
host = "127.0.0.1";
port = "5432";
};
allow_unsafe_locale = true;
};
allow_unsafe_locale = true;
};
redis =
{
enabled = true;
port = instance.value.redisPort;
password = placeholder."redis/synapse-${instance.name}";
};
turn_shared_secret = placeholder."synapse/${instance.name}/coturn";
registration_shared_secret = placeholder."synapse/${instance.name}/registration";
macaroon_secret_key = placeholder."synapse/${instance.name}/macaroon";
form_secret = placeholder."synapse/${instance.name}/form";
signing_key_path = inputs.config.sops.secrets."synapse/${instance.name}/signing-key".path;
email =
{
smtp_host = "mail.chn.moe";
smtp_port = 25;
smtp_user = "bot@chn.moe";
smtp_pass = placeholder."mail/bot";
require_transport_security = true;
notif_from = "Your Friendly %(app)s homeserver <bot@chn.moe>";
app_name = "Haonan Chen's synapse";
};
admin_contact = "mailto:chn@chn.moe";
enable_registration = true;
registrations_require_3pid = [ "email" ];
turn_uris = [ "turns:coturn.chn.moe" "turn:coturn.chn.moe" ];
max_upload_size = "1024M";
web_client_location = "https://element.chn.moe/";
serve_server_wellknown = true;
report_stats = true;
trusted_key_servers =
[{
server_name = "matrix.org";
verify_keys."ed25519:auto" = "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw";
}];
suppress_key_server_warning = true;
log_config = (inputs.pkgs.formats.yaml {}).generate "log.yaml"
{
version = 1;
formatters.precise.format =
"%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s";
handlers.console = { class = "logging.StreamHandler"; formatter = "precise"; };
root = { level = "INFO"; handlers = [ "console" ]; };
disable_existing_loggers = true;
};
pid_file = "/run/synapse-${instance.name}.pid";
media_store_path = "/var/lib/synapse/${instance.name}/media_store";
presence.enabled = true;
url_preview_enabled = true;
url_preview_ip_range_blacklist =
[
"10.0.0.0/8" "100.64.0.0/10" "127.0.0.0/8" "169.254.0.0/16" "172.16.0.0/12" "192.0.0.0/24"
"192.0.2.0/24" "192.168.0.0/16" "192.88.99.0/24" "198.18.0.0/15" "198.51.100.0/24" "2001:db8::/32"
"203.0.113.0/24" "224.0.0.0/4" "::1/128" "fc00::/7" "fe80::/10" "fec0::/10" "ff00::/8"
];
max_image_pixels = "32M";
dynamic_thumbnails = false;
});
redis =
{
enabled = true;
port = instance.value.redisPort;
password = placeholder."redis/synapse-${instance.name}";
};
turn_shared_secret = placeholder."synapse/${instance.name}/coturn";
registration_shared_secret = placeholder."synapse/${instance.name}/registration";
macaroon_secret_key = placeholder."synapse/${instance.name}/macaroon";
form_secret = placeholder."synapse/${instance.name}/form";
signing_key_path = inputs.config.sops.secrets."synapse/${instance.name}/signing-key".path;
email =
{
smtp_host = "mail.chn.moe";
smtp_port = 25;
smtp_user = "bot@chn.moe";
smtp_pass = placeholder."mail/bot";
require_transport_security = true;
notif_from = "Your Friendly %(app)s homeserver <bot@chn.moe>";
app_name = "Haonan Chen's synapse";
};
admin_contact = "mailto:chn@chn.moe";
enable_registration = true;
registrations_require_3pid = [ "email" ];
turn_uris = [ "turns:coturn.chn.moe" "turn:coturn.chn.moe" ];
max_upload_size = "1024M";
web_client_location = "https://element.chn.moe/";
extra_well_known_client_content."org.matrix.msc3575.proxy".url =
"https://${instance.value.slidingSyncHostname}";
report_stats = true;
trusted_key_servers =
[{
server_name = "matrix.org";
verify_keys."ed25519:auto" = "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw";
}];
suppress_key_server_warning = true;
log_config = (inputs.pkgs.formats.yaml {}).generate "log.yaml"
{
version = 1;
formatters.precise.format =
"%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s";
handlers.console = { class = "logging.StreamHandler"; formatter = "precise"; };
root = { level = "INFO"; handlers = [ "console" ]; };
disable_existing_loggers = true;
};
pid_file = "/run/synapse-${instance.name}.pid";
media_store_path = "/var/lib/synapse/${instance.name}/media_store";
presence.enabled = true;
url_preview_enabled = true;
url_preview_ip_range_blacklist =
[
"10.0.0.0/8" "100.64.0.0/10" "127.0.0.0/8" "169.254.0.0/16" "172.16.0.0/12" "192.0.0.0/24"
"192.0.2.0/24" "192.168.0.0/16" "192.88.99.0/24" "198.18.0.0/15" "198.51.100.0/24" "2001:db8::/32"
"203.0.113.0/24" "224.0.0.0/4" "::1/128" "fc00::/7" "fe80::/10" "fec0::/10" "ff00::/8"
];
max_image_pixels = "32M";
dynamic_thumbnails = false;
});
};
"synapse/${instance.name}-sliding-sync/env" =
{
owner = "synapse-${instance.name}";
group = "synapse-${instance.name}";
content =
let
inherit (inputs.config.sops) placeholder;
pgString = "postgresql://"
+ "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}"
+ ":${placeholder."postgresql/synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}"}"
+ "@127.0.0.1:5432"
+ "/synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}_sliding_sync"
+ "?sslmode=disable";
in
''
SYNCV3_SERVER=https://${instance.value.hostname}
SYNCV3_DB=${pgString}
SYNCV3_SECRET=${placeholder."synapse/${instance.name}/sliding-sync"}
SYNCV3_BINDADDR=127.0.0.1:${toString instance.value.slidingSyncPort}
'';
};
};
secrets = (listToAttrs (map
(secret: { name = "synapse/${instance.name}/${secret}"; value = {}; })
[ "coturn" "registration" "macaroon" "form" ]))
[ "coturn" "registration" "macaroon" "form" "sliding-sync" ]))
// { "synapse/${instance.name}/signing-key".owner = "synapse-${instance.name}"; }
// { "mail/bot" = {}; };
})
@@ -205,13 +261,19 @@ inputs:
postgresql =
{
enable = mkIf (synapse.instances != {}) true;
instances = listToAttrs (map
instances = listToAttrs (concatLists (map
(instance:
{
name = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
value.initializeFlags = { TEMPLATE = "template0"; LC_CTYPE = "C"; LC_COLLATE = "C"; };
})
(attrsToList synapse.instances));
[
{
name = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
value.initializeFlags = { TEMPLATE = "template0"; LC_CTYPE = "C"; LC_COLLATE = "C"; };
}
{
name = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}_sliding_sync";
value.user = "synapse_${replaceStrings [ "-" ] [ "_" ] instance.name}";
}
])
(attrsToList synapse.instances)));
};
redis.instances = listToAttrs (map
(instance: { name = "synapse-${instance.name}"; value.port = instance.value.redisPort; })
@@ -219,13 +281,35 @@ inputs:
nginx =
{
enable = mkIf (synapse.instances != {}) true;
https = listToAttrs (map
https = listToAttrs (concatLists (map
(instance: with instance.value;
{
name = hostname;
value.location."/".proxy = { upstream = "http://127.0.0.1:${toString port}"; websocket = true; };
})
(attrsToList synapse.instances));
[
{
name = hostname;
value.location =
{
"/".proxy = { upstream = "http://127.0.0.1:${toString port}"; websocket = true; };
"/.well-known/matrix/server".static =
{
root = builtins.toString (inputs.pkgs.writeTextFile
{
name = "server";
text = builtins.toJSON
{
"m.server" = "${hostname}:443";
};
destination = "/.well-known/matrix/server";
});
};
};
}
{
name = slidingSyncHostname;
value.location."/".proxy =
{ upstream = "http://127.0.0.1:${toString slidingSyncPort}"; websocket = true; };
}
])
(attrsToList synapse.instances)));
};
};
};

View File

@@ -3,45 +3,88 @@ inputs:
options.nixos.services.wireguard = let inherit (inputs.lib) mkOption types; in
{
enable = mkOption { type = types.bool; default = false; };
peers = mkOption { type = types.nonEmptyListOf types.nonEmptyStr; default = []; };
# wg genkey | wg pubkey
publicKey = mkOption { type = types.nonEmptyStr; };
wireguardIp = mkOption { type = types.nonEmptyStr; };
externalIp = mkOption { type = types.nullOr types.nonEmptyStr; default = null; };
lighthouse = mkOption { type = types.bool; default = false; };
behindNat = mkOption
{
type = types.bool;
default = inputs.config.nixos.services.xray.client.enable;
};
listenIp = mkOption { type = types.nullOr types.nonEmptyStr; default = null; };
# if the host is behind xray, it should listen on another port, to make xray succeffully listen on 51820
listenPort = mkOption
{
type = types.ints.unsigned;
default = if inputs.config.nixos.services.wireguard.behindNat then 51821 else 51820;
};
wireguardIp = mkOption { type = types.nonEmptyStr; };
peers = mkOption { type = types.nonEmptyListOf types.nonEmptyStr; default = []; };
};
config =
let
inherit (inputs.lib) mkIf;
inherit (inputs.lib) mkIf mkMerge;
inherit (inputs.config.nixos.services) wireguard;
inherit (builtins) map toString;
in mkIf wireguard.enable
{
networking =
let
# if the host is behind xray, it should listen on another port, to make xray succeffully listen on 51820
port = 51820 + (if inputs.config.nixos.services.xrayClient.enable then 1 else 0);
in
inherit (builtins) map toString listToAttrs filter;
in mkMerge
[
{
assertions =
[{
assertion = !wireguard.behindNat -> wireguard.listenIp != null;
message = "wireguard.listenIp should be not null when behindNat is false.";
}];
}
(
mkIf wireguard.enable
{
firewall = { allowedUDPPorts = [ port ]; trustedInterfaces = [ "wireguard" ]; };
wireguard.interfaces.wireguard =
networking =
{
ips = [ "${wireguard.wireguardIp}/24" ];
listenPort = port;
privateKeyFile = inputs.config.sops.secrets."wireguard/privateKey".path;
peers = map
firewall = { allowedUDPPorts = [ wireguard.listenPort ]; trustedInterfaces = [ "wireguard" ]; };
wireguard.interfaces.wireguard =
{
ips = [ "${wireguard.wireguardIp}/24" ];
inherit (wireguard) listenPort;
privateKeyFile = inputs.config.sops.secrets."wireguard/privateKey".path;
peers = map
(peer:
{
publicKey = peer.publicKey;
allowedIPs = [ (if peer.lighthouse then "192.168.83.0/24" else "${peer.wireguardIp}/32") ];
endpoint = mkIf (!peer.behindNat) "${peer.listenIp}:${builtins.toString peer.listenPort}";
persistentKeepalive = 3;
})
(map
(peer: inputs.topInputs.self.nixosConfigurations.${peer}.config.nixos.services.wireguard)
wireguard.peers);
};
};
sops.secrets."wireguard/privateKey" = {};
# somehow fix wireguard connection
systemd.services = mkIf wireguard.behindNat (listToAttrs (map
(peer:
{
name = "wireguard-ping-${peer.name}";
value =
{
description = "ping ${peer.name}";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig =
{
ExecStart = "${inputs.pkgs.iputils}/bin/ping -i 3 ${peer.value.wireguardIp}";
Restart = "always";
};
};
})
(filter (peer: !peer.value.behindNat) (map
(peer:
{
publicKey = peer.publicKey;
allowedIPs = [ (if peer.lighthouse then "192.168.83.0/24" else "${peer.wireguardIp}/32") ];
endpoint = mkIf (peer.externalIp != null) "${peer.externalIp}:51820";
persistentKeepalive = 3;
name = peer;
value = inputs.topInputs.self.nixosConfigurations.${peer}.config.nixos.services.wireguard;
})
(map
(peer: inputs.topInputs.self.nixosConfigurations.${peer}.config.nixos.services.wireguard)
wireguard.peers);
};
};
sops.secrets."wireguard/privateKey" = {};
};
wireguard.peers))));
}
)
];
}

View File

@@ -1,8 +1,8 @@
inputs:
{
options.nixos.services = let inherit (inputs.lib) mkOption types; in
options.nixos.services.xray = let inherit (inputs.lib) mkOption types; in
{
xrayClient =
client =
{
enable = mkOption { type = types.bool; default = false; };
serverAddress = mkOption { type = types.nonEmptyStr; };
@@ -13,7 +13,7 @@ inputs:
extraInterfaces = mkOption { type = types.listOf types.nonEmptyStr; default = []; };
}; }; };
};
xrayServer =
server =
{
enable = mkOption { type = types.bool; default = false; };
serverName = mkOption { type = types.nonEmptyStr; };
@@ -23,12 +23,19 @@ inputs:
let
inherit (inputs.lib) mkMerge mkIf;
inherit (inputs.localLib) stripeTabs attrsToList;
inherit (inputs.config.nixos.services) xrayClient xrayServer;
inherit (inputs.config.nixos.services) xray;
inherit (builtins) map listToAttrs toString genList length concatStringsSep;
in mkMerge
[
{
assertions =
[{
assertion = !(xray.client.enable && xray.server.enable);
message = "Currenty xray.client and xray.server could not be simutaniusly enabled.";
}];
}
(
mkIf xrayClient.enable
mkIf xray.client.enable
{
services =
{
@@ -40,14 +47,10 @@ inputs:
no-poll = true;
log-queries = true;
server = [ "127.0.0.1#10853" ];
interface = xrayClient.dns.extraInterfaces ++ [ "lo" ];
interface = xray.client.dns.extraInterfaces ++ [ "lo" ];
bind-dynamic = true;
ipset =
[
"/developer.download.nvidia.com/noproxy_net"
"/yuanshen.com/noproxy_net"
];
address = map (host: "/${host.name}/${host.value}") (attrsToList xrayClient.dns.hosts);
ipset = [ "/yuanshen.com/noproxy_net" ];
address = map (host: "/${host.name}/${host.value}") (attrsToList xray.client.dns.hosts);
};
};
xray = { enable = true; settingsFile = inputs.config.sops.templates."xray-client.json".path; };
@@ -130,7 +133,7 @@ inputs:
protocol = "vless";
settings.vnext =
[{
address = xrayClient.serverAddress;
address = xray.client.serverAddress;
port = 443;
users =
[{
@@ -145,7 +148,7 @@ inputs:
security = "reality";
realitySettings =
{
serverName = xrayClient.serverName;
serverName = xray.client.serverName;
publicKey = "Nl0eVZoDF9d71_3dVsZGJl3UWR9LCv3B14gu7G6vhjk";
fingerprint = "firefox";
};
@@ -308,7 +311,7 @@ inputs:
}
)
(
mkIf xrayServer.enable (let userList = genList (n: n) 30; in
mkIf xray.server.enable (let userList = genList (n: n) 30; in
{
services.xray = { enable = true; settingsFile = inputs.config.sops.templates."xray-server.json".path; };
sops =
@@ -351,7 +354,7 @@ inputs:
realitySettings =
{
dest = "127.0.0.1:${fallbackPort}";
serverNames = [ xrayServer.serverName ];
serverNames = [ xray.server.serverName ];
privateKey = inputs.config.sops.placeholder."xray-server/private-key";
minClientVer = "1.8.0";
shortIds = [ "" ];
@@ -493,12 +496,12 @@ inputs:
};
nixos.services =
{
acme = { enable = true; cert.${xrayServer.serverName}.group = inputs.config.users.users.nginx.group; };
acme = { enable = true; cert.${xray.server.serverName}.group = inputs.config.users.users.nginx.group; };
nginx =
{
enable = true;
transparentProxy.map."${xrayServer.serverName}" = 4726;
https."${xrayServer.serverName}" =
transparentProxy.map."${xray.server.serverName}" = 4726;
https."${xray.server.serverName}" =
{
listen.main = { proxyProtocol = false; addToTransparentProxy = false; };
location."/".return.return = "400";

View File

@@ -16,15 +16,16 @@ inputs:
./sops.nix
./user.nix
./sysctl.nix
./envfs.nix
];
config =
{
services = { dbus.implementation = "broker"; fstrim = { enable = true; interval = "daily"; }; };
services = { dbus.implementation = "broker"; fstrim.enable = true; };
time.timeZone = "Asia/Shanghai";
boot =
{
supportedFilesystems = [ "ntfs" ];
consoleLogLevel = 7;
# consoleLogLevel = 7;
};
hardware.enableAllFirmware = true;
environment.sessionVariables = rec
@@ -51,5 +52,11 @@ inputs:
# environment.variables.LIBRARY_PATH = "/run/current-system/sw/lib";
virtualisation.oci-containers.backend = "docker";
home-manager.sharedModules = [{ home.stateVersion = "22.11"; }];
system =
{
stateVersion = "22.11";
configurationRevision = inputs.topInputs.self.rev or "dirty";
nixos.versionSuffix = inputs.lib.mkForce "";
};
};
}

12
modules/system/envfs.nix Normal file
View File

@@ -0,0 +1,12 @@
inputs:
{
options.nixos.system.envfs = let inherit (inputs.lib) mkOption types; in
{
enable = mkOption { type = types.bool; default = true; };
};
config = inputs.lib.mkMerge
[
(builtins.elemAt inputs.topInputs.envfs.nixosModules.envfs.imports 0 inputs)
{ environment.variables.ENVFS_RESOLVE_ALWAYS = "1"; }
];
}

View File

@@ -7,44 +7,78 @@ inputs:
# "efi" using efi, "efiRemovable" using efi with install grub removable, or dev path like "/dev/sda" using bios
installDevice = mkOption { type = types.str; };
};
config =
let
inherit (inputs.lib) mkIf;
inherit (inputs.localLib) mkConditional attrsToList stripeTabs;
inherit (inputs.config.nixos.system) grub;
inherit (builtins) concatStringsSep map;
in { boot.loader =
config = let inherit (inputs.config.nixos.system) grub; in inputs.lib.mkMerge
[
# general settings
{ boot.loader.grub = { enable = true; useOSProber = false; }; }
# grub timeout
{ boot.loader.timeout = grub.timeout; }
# grub install
{
timeout = grub.timeout;
grub =
boot.loader =
{
enable = true;
useOSProber = false;
extraEntries = concatStringsSep "\n" (map
(system:
''
menuentry "${system.value}" {
insmod part_gpt
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid --set=root ${system.name}
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
'')
(attrsToList grub.windowsEntries));
device =
if grub.installDevice == "efi" || grub.installDevice == "efiRemovable" then "nodev"
else grub.installDevice;
efiSupport = grub.installDevice == "efi" || grub.installDevice == "efiRemovable";
efiInstallAsRemovable = grub.installDevice == "efiRemovable";
grub =
{
device = if builtins.elem grub.installDevice [ "efi" "efiRemovable" ] then "nodev" else grub.installDevice;
efiSupport = builtins.elem grub.installDevice [ "efi" "efiRemovable" ];
efiInstallAsRemovable = grub.installDevice == "efiRemovable";
};
efi =
{
canTouchEfiVariables = grub.installDevice == "efi";
efiSysMountPoint = inputs.lib.mkIf (builtins.elem grub.installDevice [ "efi" "efiRemovable" ]) "/boot/efi";
};
};
efi =
}
# extra grub entries
{
boot.loader.grub =
{
canTouchEfiVariables = grub.installDevice == "efi";
efiSysMountPoint =
if grub.installDevice == "efi" || grub.installDevice == "efiRemovable" then "/boot/efi"
else inputs.options.boot.loader.efi.efiSysMountPoint.default;
memtest86.enable = true;
extraFiles = inputs.lib.mkIf (builtins.elem grub.installDevice [ "efi" "efiRemovable" ])
{ "shell.efi" = "${inputs.pkgs.edk2-uefi-shell}/shell.efi"; };
extraEntries = inputs.lib.mkMerge (builtins.concatLists
[
(builtins.map
(system:
''
menuentry "${system.value}" {
insmod part_gpt
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid --set=root ${system.name}
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
'')
(inputs.localLib.attrsToList grub.windowsEntries))
[
''
menuentry "System shutdown" {
echo "System shutting down..."
halt
}
menuentry "System restart" {
echo "System rebooting..."
reboot
}
''
(
inputs.lib.optionalString (builtins.elem grub.installDevice [ "efi" "efiRemovable" ])
''
menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' {
fwsetup
}
menuentry "UEFI Shell" {
insmod fat
insmod chain
chainloader @bootRoot@/shell.efi
}
''
)
]
]);
};
};};
}
];
}

View File

@@ -19,7 +19,6 @@ inputs:
enable = true;
displayManager = { sddm.enable = true; defaultSession = "plasmawayland"; };
desktopManager.plasma5.enable = true;
videoDrivers = inputs.config.nixos.hardware.gpus;
};
systemd.services.display-manager = { after = [ "network-online.target" ]; enable = gui.autoStart; };
environment =

View File

@@ -2,7 +2,7 @@ inputs:
{
options.nixos.system.impermanence = let inherit (inputs.lib) mkOption types; in
{
enable = mkOption { type = types.bool; default = false; };
enable = mkOption { type = types.bool; default = true; };
persistence = mkOption { type = types.nonEmptyStr; default = "/nix/persistent"; };
root = mkOption { type = types.nonEmptyStr; default = "/nix/rootfs/current"; };
nodatacow = mkOption { type = types.nullOr types.nonEmptyStr; default = "/nix/nodatacow"; };
@@ -56,7 +56,7 @@ inputs:
{
users.chn =
{
directories = [ ".cache" ];
directories = [ ".cache" ".config/fontconfig" ];
};
} else {});
"${impermanence.nodatacow}" =

View File

@@ -32,14 +32,15 @@ inputs:
];
extraModulePackages = (with inputs.config.boot.kernelPackages; [ v4l2loopback ]) ++ kernel.modules.install;
extraModprobeConfig = builtins.concatStringsSep "\n" kernel.modules.modprobeConfig;
kernelParams = [ "delayacct" "acpi_osi=Linux" ];
kernelParams = [ "delayacct" "acpi_osi=Linux" "acpi.ec_no_wakeup=1" ];
kernelPackages = inputs.pkgs.linuxPackages_xanmod_latest;
kernelPatches =
let
patches =
{
cjktty =
{
[{
name = "cjktty";
patch =
let
version = builtins.splitVersion inputs.config.boot.kernelPackages.kernel.version;
@@ -54,15 +55,16 @@ inputs:
hashes =
{
"6.1" = "11ddiammvjxx2m9v32p25l1ai759a1d6xhdpszgnihv7g2fzigf5";
"6.6" = "19ib0syj3207ifr315gdrnpv6nhh435fmgl05c7k715nng40i827";
"6.7" = "1yfsmc0873xiwlirir0xfp9zyrpd09q1srgr3z4rl7i7lxzaqls8";
};
in hashes."${major}.${minor}";
};
extraStructuredConfig =
{ FONT_CJK_16x16 = inputs.lib.kernel.yes; FONT_CJK_32x32 = inputs.lib.kernel.yes; };
};
}];
lantian =
{
[{
name = "lantian";
patch = null;
# pick from xddxdd/nur-packages dce93a
extraStructuredConfig = with inputs.lib.kernel;
@@ -72,10 +74,54 @@ inputs:
PARAVIRT_TIME_ACCOUNTING = yes;
PM_AUTOSLEEP = yes;
WQ_POWER_EFFICIENT_DEFAULT = yes;
PREEMPT_VOLUNTARY = inputs.lib.mkForce no;
PREEMPT = inputs.lib.mkForce yes;
NO_HZ_FULL = yes;
HZ_1000 = inputs.lib.mkForce yes;
HZ_250 = inputs.lib.mkForce no;
HZ = inputs.lib.mkForce (freeform "1000");
};
};
}];
surface =
let
version =
let versionArray = builtins.splitVersion inputs.config.boot.kernelPackages.kernel.version;
in "${builtins.elemAt versionArray 0}.${builtins.elemAt versionArray 1}";
kernelPatches = builtins.map
(file:
{
name = "surface-${file.name}";
patch = "${inputs.topInputs.linux-surface}/patches/${version}/${file.name}";
})
(builtins.filter
(file: file.value == "regular")
(inputs.localLib.attrsToList (builtins.readDir
"${inputs.topInputs.linux-surface}/patches/${version}")));
kernelConfig = builtins.removeAttrs
(builtins.listToAttrs (builtins.concatLists (builtins.map
(configString:
if builtins.match "CONFIG_.*=." configString == [] then
(
let match = builtins.match "CONFIG_(.*)=(.)" configString; in with inputs.lib.kernel;
[{
name = builtins.elemAt match 0;
value = { m = module; y = yes; }.${builtins.elemAt match 1};
}]
)
else if builtins.match "# CONFIG_.* is not set" configString == [] then
[{
name = builtins.elemAt (builtins.match "# CONFIG_(.*) is not set" configString) 0;
value = inputs.lib.kernel.unset;
}]
else if builtins.match "#.*" configString == [] then []
else if configString == "" then []
else throw "could not parse: ${configString}"
)
(inputs.lib.strings.splitString "\n"
(builtins.readFile "${inputs.topInputs.linux-surface}/configs/surface-${version}.config")))))
[ "VIDEO_IPU3_IMGU" ];
in kernelPatches ++ [{ name = "surface-config"; patch = null; extraStructuredConfig = kernelConfig; }];
};
in
builtins.map (name: { inherit name; } // patches.${name}) kernel.patches;
in builtins.concatLists (builtins.map (name: patches.${name}) kernel.patches);
};};
}

View File

@@ -4,62 +4,82 @@ inputs:
{
# marches allowed to be compiled on this machine
marches = mkOption { type = types.nullOr (types.listOf types.nonEmptyStr); default = null; };
keepOutputs = mkOption { type = types.bool; default = false; };
includeBuildDependencies = mkOption { type = types.bool; default = inputs.topInputs.self.config.archive; };
substituters = mkOption { type = types.nullOr (types.listOf types.nonEmptyStr); default = null; };
autoOptimiseStore = mkOption { type = types.bool; default = true; };
autoOptimiseStore = mkOption { type = types.bool; default = false; };
};
config =
let
inherit (inputs.config.nixos.system) nix;
in
config = let inherit (inputs.config.nixos.system) nix; in inputs.lib.mkMerge
[
# general nix config
{
nix.settings =
{
nix =
system-features = [ "big-parallel" "nixos-test" "benchmark" ];
experimental-features = [ "nix-command" "flakes" ];
keep-failed = true;
max-substitution-jobs = 1;
trusted-public-keys = [ "chn:Cc+nowW1LIpe1kyXOZmNaznFDiH1glXmpb4A+WD/DTE=" ];
show-trace = true;
max-jobs = 1;
cores = 0;
keep-going = true;
};
systemd.services.nix-daemon = { serviceConfig.CacheDirectory = "nix"; environment.TMPDIR = "/var/cache/nix"; };
}
# nix daemon use lower io/cpu priority
{
nix = { daemonIOSchedClass = "idle"; daemonCPUSchedPolicy = "idle"; };
systemd.services.nix-daemon.serviceConfig = { Slice = "-.slice"; Nice = "19"; };
}
# nix channel & nix flake registry
{
nix =
{
registry =
{
settings =
{
system-features = [ "big-parallel" "nixos-test" "benchmark" ] ++ (map
(march: "gccarch-${march}")
(
if nix.marches == null then
(with inputs.config.nixos.system.nixpkgs; if march == null then [] else [ march ])
else nix.marches
));
experimental-features = [ "nix-command" "flakes" ];
keep-outputs = nix.keepOutputs;
keep-failed = true;
auto-optimise-store = nix.autoOptimiseStore;
substituters = if nix.substituters == null then [ "https://cache.nixos.org/" ] else nix.substituters;
trusted-public-keys = [ "chn:Cc+nowW1LIpe1kyXOZmNaznFDiH1glXmpb4A+WD/DTE=" ];
show-trace = true;
max-jobs = 2;
cores = 0;
keep-going = true;
};
daemonIOSchedClass = "idle";
daemonCPUSchedPolicy = "idle";
registry =
{
nixpkgs.flake = inputs.topInputs.nixpkgs;
nixpkgs-unstable.flake = inputs.topInputs.nixpkgs-unstable;
nixos.flake = inputs.topInputs.self;
};
nixPath = [ "nixpkgs=${inputs.topInputs.nixpkgs}" ];
nixpkgs.flake = inputs.topInputs.nixpkgs;
nixpkgs-unstable.flake = inputs.topInputs.nixpkgs-unstable;
nixos.flake = inputs.topInputs.self;
};
system = { stateVersion = "22.11"; configurationRevision = inputs.topInputs.self.rev or "dirty"; };
systemd.services.nix-daemon =
{
serviceConfig = { CacheDirectory = "nix"; Slice = "-.slice"; Nice = "19"; };
environment = { TMPDIR = "/var/cache/nix"; };
};
environment.etc =
nixPath = [ "nixpkgs=${inputs.topInputs.nixpkgs}" ];
};
environment =
{
etc =
{
"channels/nixpkgs".source = inputs.topInputs.nixpkgs.outPath;
"channels/nixpkgs-unstable".source = inputs.topInputs.nixpkgs-unstable.outPath;
"nixos".source = inputs.topInputs.self.outPath;
};
# environment.pathsToLink = [ "/include" ];
# environment.variables.CPATH = "/run/current-system/sw/include";
# environment.variables.LIBRARY_PATH = "/run/current-system/sw/lib";
# gui.enable
variables.COMMA_NIXPKGS_FLAKE = "nixpkgs-unstable";
};
}
# marches
{
nix.settings.system-features = map
(march: "gccarch-${march}")
(
if nix.marches == null then
(with inputs.config.nixos.system.nixpkgs; if march == null then [] else [ march ])
else nix.marches
);
}
# includeBuildDependencies
{
nix.settings.keep-outputs = nix.includeBuildDependencies;
system.includeBuildDependencies = nix.includeBuildDependencies;
}
# substituters
{
nix.settings.substituters = if nix.substituters == null then [ "https://cache.nixos.org/" ] else nix.substituters;
}
# autoOptimiseStore
{
nix.settings.auto-optimise-store = nix.autoOptimiseStore;
}
# c++ include path
# environment.pathsToLink = [ "/include" ];
# environment.variables.CPATH = "/run/current-system/sw/include";
# environment.variables.LIBRARY_PATH = "/run/current-system/sw/lib";
];
}

View File

@@ -24,7 +24,7 @@ inputs:
nixpkgs =
let
permittedInsecurePackages =
[ "openssl_1_1" "electron_19" "python2" "electron_12" "electron_24" "zotero" ];
[ "openssl_1_1" "electron_19" "python2" "electron_12" "electron_24" "zotero" "electron_25" ];
hostPlatform = mkConditional (nixpkgs.march != null)
{ system = "x86_64-linux"; gcc = { arch = nixpkgs.march; tune = nixpkgs.march; }; }
"x86_64-linux";
@@ -138,8 +138,10 @@ inputs:
sandybridge = "MSANDYBRIDGE";
silvermont = "MSILVERMONT";
broadwell = "MBROADWELL";
skylake = "MSKYLAKE";
znver2 = "MZEN2";
znver3 = "MZEN3";
znver4 = "MZEN4";
};
in { GENERIC_CPU = inputs.lib.kernel.no; ${kernelConfig.${nixpkgs.march}} = inputs.lib.kernel.yes; };
}];

View File

@@ -1,10 +1,11 @@
inputs:
{
# imports = inputs.localLib.mkModules [ ./plasma.nix ];
imports = inputs.localLib.mkModules [ ./plasma ];
config =
let
inherit (inputs.lib) mkIf;
inherit (inputs.config.nixos) users;
inherit (builtins) listToAttrs;
in mkIf (builtins.elem "chn" users.users)
{
users.users.chn =
@@ -42,7 +43,10 @@ inputs:
# identityFile = "~/.ssh/xmuhk_id_rsa";
xmuhk = { host = "xmuhk"; hostname = "10.26.14.56"; user = "xmuhk"; };
xmuhk2 = { host = "xmuhk2"; hostname = "183.233.219.132"; user = "xmuhk"; port = 62022; };
};
}
// (listToAttrs (map
(system: { name = system; value.forwardAgent = true; })
[ "vps6" "wireguard.vps6" "vps7" "wireguard.vps7" "wireguard.pc" "nas" "wireguard.nas" ]));
};
home.packages =
[

View File

@@ -1,853 +0,0 @@
{
config.home-manager.users.chn.config.programs.plasma =
{
enable = true;
shortcuts =
{
# crow translate
"io.crow_translate.CrowTranslate.desktop"."TranslateSelectedText" = "Ctrl+Alt+E";
# display
"kded5"."display" = [ "Display" "Meta+P" ];
"kwin"."view_actual_size" = "Meta+0";
"kwin"."view_zoom_in" = ["Meta++" "Meta+="];
"kwin"."view_zoom_out" = "Meta+-";
"org_kde_powerdevil"."Decrease Screen Brightness" = "Monitor Brightness Down";
"org_kde_powerdevil"."Increase Screen Brightness" = "Monitor Brightness Up";
# volume
"kmix" =
{
"decrease_volume" = "Volume Down";
"increase_volume" = "Volume Up";
"mic_mute" = [ "Meta+Volume Mute" ];
"mute" = "Volume Mute";
};
# session
"ksmserver" =
{
"Lock Session" = [ "Meta+L" "Screensaver" ];
"Log Out" = "Ctrl+Alt+Del";
};
"org_kde_powerdevil"."Turn Off Screen" = "Meta+Ctrl+L";
# mouse
"kwin"."MoveMouseToCenter" = "Meta+F6";
# window
"kwin"."Overview" = "Meta+Tab";
"kwin"."Show Desktop" = "Meta+D";
"kwin"."Suspend Compositing" = "Alt+Shift+F12";
"kwin"."Walk Through Windows" = "Alt+Tab";
"kwin"."Walk Through Windows (Reverse)" = "Alt+Shift+Backtab";
"kwin"."Window Above Other Windows" = "Meta+Shift+PgUp";
"kwin"."Window Below Other Windows" = "Meta+Shift+PgDown";
"kwin"."Window Close" = "Alt+F4";
"kwin"."Window Maximize" = "Meta+PgUp";
"kwin"."Window Minimize" = "Meta+PgDown";
"kwin"."Window Operations Menu" = "Alt+F3";
"kwin"."Window Quick Tile Bottom" = "Meta+Down";
"kwin"."Window Quick Tile Left" = "Meta+Left";
"kwin"."Window Quick Tile Right" = "Meta+Right";
"kwin"."Window Quick Tile Top" = "Meta+Up";
# virtual desktop
"kwin"."Switch One Desktop Down" = "Meta+Ctrl+Down";
"kwin"."Switch One Desktop Up" = "Meta+Ctrl+Up";
"kwin"."Switch One Desktop to the Left" = "Meta+Ctrl+Left";
"kwin"."Switch One Desktop to the Right" = "Meta+Ctrl+Right";
"kwin"."Window One Desktop Down" = "Meta+Ctrl+Shift+Down";
"kwin"."Window One Desktop Up" = "Meta+Ctrl+Shift+Up";
"kwin"."Window One Desktop to the Left" = "Meta+Ctrl+Shift+Left";
"kwin"."Window One Desktop to the Right" = "Meta+Ctrl+Shift+Right";
# media
"mediacontrol"."nextmedia" = "Media Next";
"mediacontrol"."pausemedia" = "Media Pause";
"mediacontrol"."playpausemedia" = [ "Pause" "Media Play" ];
"mediacontrol"."previousmedia" = "Media Previous";
"mediacontrol"."stopmedia" = "Media Stop";
# dolphin
"org.kde.dolphin.desktop"."_launch" = "Meta+E";
# konsole
"org.kde.konsole.desktop"."_launch" = "Ctrl+Alt+T";
# krunner
"org.kde.krunner.desktop"."_launch" = "Alt+Space";
# screenshot
"org.kde.spectacle.desktop"."ActiveWindowScreenShot" = "Meta+Print";
"org.kde.spectacle.desktop"."CurrentMonitorScreenShot" = [ ];
"org.kde.spectacle.desktop"."FullScreenScreenShot" = "Shift+Print";
"org.kde.spectacle.desktop"."OpenWithoutScreenshot" = [ ];
"org.kde.spectacle.desktop"."RectangularRegionScreenShot" = "Meta+Shift+Print";
"org.kde.spectacle.desktop"."WindowUnderCursorScreenShot" = "Meta+Ctrl+Print";
"org.kde.spectacle.desktop"."_launch" = "Print";
# settings
"systemsettings.desktop"."_launch" = "Meta+I";
# yakuake
"yakuake"."toggle-window-state" = "Meta+Space";
};
configFile =
{
# baloo
# "baloofilerc"."Basic Settings"."Indexing-Enabled" = false;
# dolphin
"dolphinrc"."General"."ShowFullPath" = true;
"dolphinrc"."PreviewSettings"."Plugins" = "blenderthumbnail,comicbookthumbnail,djvuthumbnail,ebookthumbnail,exrthumbnail,marble_thumbnail_geojson,marble_thumbnail_gpx,jpegthumbnail,marble_thumbnail_kmz,marble_thumbnail_kml,kraorathumbnail,windowsimagethumbnail,windowsexethumbnail,mltpreview,mobithumbnail,opendocumentthumbnail,marble_thumbnail_osm,palathumbcreator,gsthumbnail,rawthumbnail,svgthumbnail,imagethumbnail,fontthumbnail,directorythumbnail,textthumbnail,webarchivethumbnail,ffmpegthumbs,audiothumbnail";
"kactivitymanagerdrc"."activities"."f305b694-8f87-46ec-a9b1-4425c55a077e" = "Default";
"kactivitymanagerdrc"."activities-icons"."242e672c-3145-4b8f-acc4-7663d17dabcc" = "activities";
"kactivitymanagerdrc"."main"."currentActivity" = "f305b694-8f87-46ec-a9b1-4425c55a077e";
"kactivitymanagerdrc"."main"."runningActivities" = "f305b694-8f87-46ec-a9b1-4425c55a077e";
"kactivitymanagerdrc"."main"."stoppedActivities" = "";
"kcminputrc"."ButtonRebinds.Mouse"."ExtraButton1" = "Key,PgDown";
"kcminputrc"."ButtonRebinds.Mouse"."ExtraButton2" = "Key,PgUp";
"kcminputrc"."Libinput.2321.21128.HTIX5288:00 0911:5288 Touchpad"."ClickMethod" = 2;
"kcminputrc"."Libinput.2321.21128.HTIX5288:00 0911:5288 Touchpad"."MiddleButtonEmulation" = true;
"kcminputrc"."Libinput.2321.21128.HTIX5288:00 0911:5288 Touchpad"."TapToClick" = true;
"kcminputrc"."Mouse"."X11LibInputXAccelProfileFlat" = false;
"kcminputrc"."Mouse"."XLbInptAccelProfileFlat" = true;
"kcminputrc"."Mouse"."XLbInptPointerAcceleration" = 0.6;
"kcminputrc"."Mouse"."cursorTheme" = "breeze_cursors";
"kcminputrc"."Tmp"."update_info" = "delete_cursor_old_default_size.upd:DeleteCursorOldDefaultSize";
"kded5rc"."Module-browserintegrationreminder"."autoload" = false;
"kded5rc"."Module-device_automounter"."autoload" = false;
"kded5rc"."PlasmaBrowserIntegration"."shownCount" = 4;
"kdeglobals"."DirSelect Dialog"."DirSelectDialog Size" = "1920,1050";
"kdeglobals"."General"."AllowKDEAppsToRememberWindowPositions" = true;
"kdeglobals"."General"."BrowserApplication" = "firefox.desktop";
"kdeglobals"."General"."LastUsedCustomAccentColor" = "61,212,37";
"kdeglobals"."General"."XftAntialias" = true;
"kdeglobals"."General"."XftHintStyle" = "hintslight";
"kdeglobals"."General"."XftSubPixel" = "rgb";
"kdeglobals"."KDE"."SingleClick" = true;
"kdeglobals"."KDE"."widgetStyle" = "kvantum";
"kdeglobals"."KFileDialog Settings"."Allow Expansion" = true;
"kdeglobals"."KFileDialog Settings"."Automatically select filename extension" = true;
"kdeglobals"."KFileDialog Settings"."Breadcrumb Navigation" = false;
"kdeglobals"."KFileDialog Settings"."Decoration position" = 2;
"kdeglobals"."KFileDialog Settings"."LocationCombo Completionmode" = 5;
"kdeglobals"."KFileDialog Settings"."PathCombo Completionmode" = 5;
"kdeglobals"."KFileDialog Settings"."Preview Width" = 688;
"kdeglobals"."KFileDialog Settings"."Show Bookmarks" = true;
"kdeglobals"."KFileDialog Settings"."Show Full Path" = true;
"kdeglobals"."KFileDialog Settings"."Show Inline Previews" = false;
"kdeglobals"."KFileDialog Settings"."Show Preview" = false;
"kdeglobals"."KFileDialog Settings"."Show Speedbar" = true;
"kdeglobals"."KFileDialog Settings"."Show hidden files" = true;
"kdeglobals"."KFileDialog Settings"."Sort by" = "Name";
"kdeglobals"."KFileDialog Settings"."Sort directories first" = true;
"kdeglobals"."KFileDialog Settings"."Sort hidden files last" = false;
"kdeglobals"."KFileDialog Settings"."Sort reversed" = false;
"kdeglobals"."KFileDialog Settings"."Speedbar Width" = 89;
"kdeglobals"."KFileDialog Settings"."View Style" = "DetailTree";
"kdeglobals"."KScreen"."ScreenScaleFactors" = "eDP-1=1;DP-1=1;";
"kdeglobals"."KShortcutsDialog Settings"."Dialog Size" = "600,480";
"kdeglobals"."PreviewSettings"."MaximumRemoteSize" = 0;
"kdeglobals"."WM"."activeBackground" = "247,247,247";
"kdeglobals"."WM"."activeBlend" = "153,153,153";
"kdeglobals"."WM"."activeForeground" = "120,120,120";
"kdeglobals"."WM"."inactiveBackground" = "242,242,242";
"kdeglobals"."WM"."inactiveBlend" = "221,221,221";
"kdeglobals"."WM"."inactiveForeground" = "170,170,170";
"kgammarc"."ConfigFile"."use" = "kgammarc";
"kglobalshortcutsrc"."ActivityManager"."_k_friendly_name" = "";
"kglobalshortcutsrc"."KDE Keyboard Layout Switcher"."_k_friendly_name" = "";
"kglobalshortcutsrc"."io.crow_translate.CrowTranslate.desktop"."_k_friendly_name" = "Crow Translate";
"kglobalshortcutsrc"."juk"."_k_friendly_name" = "JuK";
"kglobalshortcutsrc"."kaccess"."_k_friendly_name" = "";
"kglobalshortcutsrc"."kcm_touchpad"."_k_friendly_name" = "";
"kglobalshortcutsrc"."kded5"."_k_friendly_name" = "KDE Daemon";
"kglobalshortcutsrc"."khotkeys"."_k_friendly_name" = "Custom Shortcuts Service";
"kglobalshortcutsrc"."kmix"."_k_friendly_name" = "";
"kglobalshortcutsrc"."ksmserver"."_k_friendly_name" = "";
"kglobalshortcutsrc"."kwin"."_k_friendly_name" = "KWin";
"kglobalshortcutsrc"."mediacontrol"."_k_friendly_name" = "";
"kglobalshortcutsrc"."org.kde.dolphin.desktop"."_k_friendly_name" = "Dolphin";
"kglobalshortcutsrc"."org.kde.kcalc.desktop"."_k_friendly_name" = "KCalc";
"kglobalshortcutsrc"."org.kde.konsole.desktop"."_k_friendly_name" = "Konsole";
"kglobalshortcutsrc"."org.kde.krunner.desktop"."_k_friendly_name" = "KRunner";
"kglobalshortcutsrc"."org.kde.plasma.emojier.desktop"."_k_friendly_name" = "Emoji Selector";
"kglobalshortcutsrc"."org.kde.spectacle.desktop"."_k_friendly_name" = "Spectacle ";
"kglobalshortcutsrc"."org_kde_powerdevil"."_k_friendly_name" = "";
"kglobalshortcutsrc"."plasmashell"."_k_friendly_name" = "Plasma";
"kglobalshortcutsrc"."systemsettings.desktop"."_k_friendly_name" = "System Settings";
"kglobalshortcutsrc"."yakuake"."_k_friendly_name" = "Yakuake";
"khotkeysrc"."Data"."DataCount" = 3;
"khotkeysrc"."Data_1"."Comment" = "KMenuEdit Global Shortcuts";
"khotkeysrc"."Data_1"."DataCount" = 1;
"khotkeysrc"."Data_1"."Enabled" = true;
"khotkeysrc"."Data_1"."Name" = "KMenuEdit";
"khotkeysrc"."Data_1"."SystemGroup" = 1;
"khotkeysrc"."Data_1"."Type" = "ACTION_DATA_GROUP";
"khotkeysrc"."Data_1Conditions"."Comment" = "";
"khotkeysrc"."Data_1Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_1_1"."Comment" = "Comment";
"khotkeysrc"."Data_1_1"."Enabled" = true;
"khotkeysrc"."Data_1_1"."Name" = "Search";
"khotkeysrc"."Data_1_1"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_1_1Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_1_1Actions0"."CommandURL" = "http://google.com";
"khotkeysrc"."Data_1_1Actions0"."Type" = "COMMAND_URL";
"khotkeysrc"."Data_1_1Conditions"."Comment" = "";
"khotkeysrc"."Data_1_1Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_1_1Triggers"."Comment" = "Simple_action";
"khotkeysrc"."Data_1_1Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_1_1Triggers0"."Key" = "";
"khotkeysrc"."Data_1_1Triggers0"."Type" = "SHORTCUT";
"khotkeysrc"."Data_1_1Triggers0"."Uuid" = "{d03619b6-9b3c-48cc-9d9c-a2aadb485550}";
"khotkeysrc"."Data_2"."Comment" = "This group contains various examples demonstrating most of the features of KHotkeys. (Note that this group and all its actions are disabled by default.)";
"khotkeysrc"."Data_2"."DataCount" = 8;
"khotkeysrc"."Data_2"."Enabled" = false;
"khotkeysrc"."Data_2"."ImportId" = "kde32b1";
"khotkeysrc"."Data_2"."Name" = "Examples";
"khotkeysrc"."Data_2"."SystemGroup" = 0;
"khotkeysrc"."Data_2"."Type" = "ACTION_DATA_GROUP";
"khotkeysrc"."Data_2Conditions"."Comment" = "";
"khotkeysrc"."Data_2Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_1"."Comment" = "After pressing Ctrl+Alt+I, the KSIRC window will be activated, if it exists. Simple.";
"khotkeysrc"."Data_2_1"."Enabled" = false;
"khotkeysrc"."Data_2_1"."Name" = "Activate KSIRC Window";
"khotkeysrc"."Data_2_1"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_1Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_1Actions0"."Type" = "ACTIVATE_WINDOW";
"khotkeysrc"."Data_2_1Actions0Window"."Comment" = "KSIRC window";
"khotkeysrc"."Data_2_1Actions0Window"."WindowsCount" = 1;
"khotkeysrc"."Data_2_1Actions0Window0"."Class" = "ksirc";
"khotkeysrc"."Data_2_1Actions0Window0"."ClassType" = 1;
"khotkeysrc"."Data_2_1Actions0Window0"."Comment" = "KSIRC";
"khotkeysrc"."Data_2_1Actions0Window0"."Role" = "";
"khotkeysrc"."Data_2_1Actions0Window0"."RoleType" = 0;
"khotkeysrc"."Data_2_1Actions0Window0"."Title" = "";
"khotkeysrc"."Data_2_1Actions0Window0"."TitleType" = 0;
"khotkeysrc"."Data_2_1Actions0Window0"."Type" = "SIMPLE";
"khotkeysrc"."Data_2_1Actions0Window0"."WindowTypes" = 33;
"khotkeysrc"."Data_2_1Conditions"."Comment" = "";
"khotkeysrc"."Data_2_1Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_1Triggers"."Comment" = "Simple_action";
"khotkeysrc"."Data_2_1Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_2_1Triggers0"."Key" = "Ctrl+Alt+I";
"khotkeysrc"."Data_2_1Triggers0"."Type" = "SHORTCUT";
"khotkeysrc"."Data_2_1Triggers0"."Uuid" = "{24dd86db-8cad-4cfe-90c1-4dc99fd82b3c}";
"khotkeysrc"."Data_2_2"."Comment" = "After pressing Alt+Ctrl+H the input of 'Hello' will be simulated, as if you typed it. This is especially useful if you have call to frequently type a word (for instance, 'unsigned'). Every keypress in the input is separated by a colon ':'. Note that the keypresses literally mean keypresses, so you have to write what you would press on the keyboard. In the table below, the left column shows the input and the right column shows what to type.\n\n\"enter\" (i.e. new line) Enter or Return\na (i.e. small a) A\nA (i.e. capital a) Shift+A\n: (colon) Shift+;\n' ' (space) Space";
"khotkeysrc"."Data_2_2"."Enabled" = false;
"khotkeysrc"."Data_2_2"."Name" = "Type 'Hello'";
"khotkeysrc"."Data_2_2"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_2Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_2Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_2_2Actions0"."Input" = "Shift+H:E:L:L:O\n";
"khotkeysrc"."Data_2_2Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_2_2Conditions"."Comment" = "";
"khotkeysrc"."Data_2_2Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_2Triggers"."Comment" = "Simple_action";
"khotkeysrc"."Data_2_2Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_2_2Triggers0"."Key" = "Ctrl+Alt+H";
"khotkeysrc"."Data_2_2Triggers0"."Type" = "SHORTCUT";
"khotkeysrc"."Data_2_2Triggers0"."Uuid" = "{9a310197-d2b6-4ef8-a227-072d734024ab}";
"khotkeysrc"."Data_2_3"."Comment" = "This action runs Konsole, after pressing Ctrl+Alt+T.";
"khotkeysrc"."Data_2_3"."Enabled" = false;
"khotkeysrc"."Data_2_3"."Name" = "Run Konsole";
"khotkeysrc"."Data_2_3"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_3Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_3Actions0"."CommandURL" = "konsole";
"khotkeysrc"."Data_2_3Actions0"."Type" = "COMMAND_URL";
"khotkeysrc"."Data_2_3Conditions"."Comment" = "";
"khotkeysrc"."Data_2_3Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_3Triggers"."Comment" = "Simple_action";
"khotkeysrc"."Data_2_3Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_2_3Triggers0"."Key" = "Ctrl+Alt+T";
"khotkeysrc"."Data_2_3Triggers0"."Type" = "SHORTCUT";
"khotkeysrc"."Data_2_3Triggers0"."Uuid" = "{a07e67fe-65e3-4ea3-a533-9cbb1e14b221}";
"khotkeysrc"."Data_2_4"."Comment" = "Read the comment on the \"Type 'Hello'\" action first.\n\nQt Designer uses Ctrl+F4 for closing windows. In KDE, however, Ctrl+F4 is the shortcut for going to virtual desktop 4, so this shortcut does not work in Qt Designer. Further, Qt Designer does not use KDE's standard Ctrl+W for closing the window.\n\nThis problem can be solved by remapping Ctrl+W to Ctrl+F4 when the active window is Qt Designer. When Qt Designer is active, every time Ctrl+W is pressed, Ctrl+F4 will be sent to Qt Designer instead. In other applications, the effect of Ctrl+W is unchanged.\n\nWe now need to specify three things: A new shortcut trigger on 'Ctrl+W', a new keyboard input action sending Ctrl+F4, and a new condition that the active window is Qt Designer.\nQt Designer seems to always have title 'Qt Designer by Trolltech', so the condition will check for the active window having that title.";
"khotkeysrc"."Data_2_4"."Enabled" = false;
"khotkeysrc"."Data_2_4"."Name" = "Remap Ctrl+W to Ctrl+F4 in Qt Designer";
"khotkeysrc"."Data_2_4"."Type" = "GENERIC_ACTION_DATA";
"khotkeysrc"."Data_2_4Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_4Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_2_4Actions0"."Input" = "Ctrl+F4";
"khotkeysrc"."Data_2_4Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_2_4Conditions"."Comment" = "";
"khotkeysrc"."Data_2_4Conditions"."ConditionsCount" = 1;
"khotkeysrc"."Data_2_4Conditions0"."Type" = "ACTIVE_WINDOW";
"khotkeysrc"."Data_2_4Conditions0Window"."Comment" = "Qt Designer";
"khotkeysrc"."Data_2_4Conditions0Window"."WindowsCount" = 1;
"khotkeysrc"."Data_2_4Conditions0Window0"."Class" = "";
"khotkeysrc"."Data_2_4Conditions0Window0"."ClassType" = 0;
"khotkeysrc"."Data_2_4Conditions0Window0"."Comment" = "";
"khotkeysrc"."Data_2_4Conditions0Window0"."Role" = "";
"khotkeysrc"."Data_2_4Conditions0Window0"."RoleType" = 0;
"khotkeysrc"."Data_2_4Conditions0Window0"."Title" = "Qt Designer by Trolltech";
"khotkeysrc"."Data_2_4Conditions0Window0"."TitleType" = 2;
"khotkeysrc"."Data_2_4Conditions0Window0"."Type" = "SIMPLE";
"khotkeysrc"."Data_2_4Conditions0Window0"."WindowTypes" = 33;
"khotkeysrc"."Data_2_4Triggers"."Comment" = "";
"khotkeysrc"."Data_2_4Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_2_4Triggers0"."Key" = "Ctrl+W";
"khotkeysrc"."Data_2_4Triggers0"."Type" = "SHORTCUT";
"khotkeysrc"."Data_2_4Triggers0"."Uuid" = "{bb31801d-1f7e-497a-acdd-d6ac4dc651b9}";
"khotkeysrc"."Data_2_5"."Comment" = "By pressing Alt+Ctrl+W a D-Bus call will be performed that will show the minicli. You can use any kind of D-Bus call, just like using the command line 'qdbus' tool.";
"khotkeysrc"."Data_2_5"."Enabled" = false;
"khotkeysrc"."Data_2_5"."Name" = "Perform D-Bus call 'qdbus org.kde.krunner /App display'";
"khotkeysrc"."Data_2_5"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_5Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_5Actions0"."Arguments" = "";
"khotkeysrc"."Data_2_5Actions0"."Call" = "popupExecuteCommand";
"khotkeysrc"."Data_2_5Actions0"."RemoteApp" = "org.kde.krunner";
"khotkeysrc"."Data_2_5Actions0"."RemoteObj" = "/App";
"khotkeysrc"."Data_2_5Actions0"."Type" = "DBUS";
"khotkeysrc"."Data_2_5Conditions"."Comment" = "";
"khotkeysrc"."Data_2_5Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_5Triggers"."Comment" = "Simple_action";
"khotkeysrc"."Data_2_5Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_2_5Triggers0"."Key" = "Ctrl+Alt+W";
"khotkeysrc"."Data_2_5Triggers0"."Type" = "SHORTCUT";
"khotkeysrc"."Data_2_5Triggers0"."Uuid" = "{811d3453-4611-4e42-864b-e7325b45969b}";
"khotkeysrc"."Data_2_6"."Comment" = "Read the comment on the \"Type 'Hello'\" action first.\n\nJust like the \"Type 'Hello'\" action, this one simulates keyboard input, specifically, after pressing Ctrl+Alt+B, it sends B to XMMS (B in XMMS jumps to the next song). The 'Send to specific window' checkbox is checked and a window with its class containing 'XMMS_Player' is specified; this will make the input always be sent to this window. This way, you can control XMMS even if, for instance, it is on a different virtual desktop.\n\n(Run 'xprop' and click on the XMMS window and search for WM_CLASS to see 'XMMS_Player').";
"khotkeysrc"."Data_2_6"."Enabled" = false;
"khotkeysrc"."Data_2_6"."Name" = "Next in XMMS";
"khotkeysrc"."Data_2_6"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_6Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_6Actions0"."DestinationWindow" = 1;
"khotkeysrc"."Data_2_6Actions0"."Input" = "B";
"khotkeysrc"."Data_2_6Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_2_6Actions0DestinationWindow"."Comment" = "XMMS window";
"khotkeysrc"."Data_2_6Actions0DestinationWindow"."WindowsCount" = 1;
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."Class" = "XMMS_Player";
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."ClassType" = 1;
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."Comment" = "XMMS Player window";
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."Role" = "";
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."RoleType" = 0;
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."Title" = "";
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."TitleType" = 0;
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."Type" = "SIMPLE";
"khotkeysrc"."Data_2_6Actions0DestinationWindow0"."WindowTypes" = 33;
"khotkeysrc"."Data_2_6Conditions"."Comment" = "";
"khotkeysrc"."Data_2_6Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_6Triggers"."Comment" = "Simple_action";
"khotkeysrc"."Data_2_6Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_2_6Triggers0"."Key" = "Ctrl+Alt+B";
"khotkeysrc"."Data_2_6Triggers0"."Type" = "SHORTCUT";
"khotkeysrc"."Data_2_6Triggers0"."Uuid" = "{14de0367-f2e2-4535-a8b0-3a4aa9acc58b}";
"khotkeysrc"."Data_2_7"."Comment" = "Konqueror in KDE3.1 has tabs, and now you can also have gestures.\n\nJust press the middle mouse button and start drawing one of the gestures, and after you are finished, release the mouse button. If you only need to paste the selection, it still works, just click the middle mouse button. (You can change the mouse button to use in the global settings).\n\nRight now, there are the following gestures available:\nmove right and back left - Forward (Alt+Right)\nmove left and back right - Back (Alt+Left)\nmove up and back down - Up (Alt+Up)\ncircle counterclockwise - Reload (F5)\n\nThe gesture shapes can be entered by performing them in the configuration dialog. You can also look at your numeric pad to help you: gestures are recognized like a 3x3 grid of fields, numbered 1 to 9.\n\nNote that you must perform exactly the gesture to trigger the action. Because of this, it is possible to enter more gestures for the action. You should try to avoid complicated gestures where you change the direction of mouse movement more than once. For instance, 45654 or 74123 are simple to perform, but 1236987 may be already quite difficult.\n\nThe conditions for all gestures are defined in this group. All these gestures are active only if the active window is Konqueror (class contains 'konqueror').";
"khotkeysrc"."Data_2_7"."DataCount" = 4;
"khotkeysrc"."Data_2_7"."Enabled" = false;
"khotkeysrc"."Data_2_7"."Name" = "Konqi Gestures";
"khotkeysrc"."Data_2_7"."SystemGroup" = 0;
"khotkeysrc"."Data_2_7"."Type" = "ACTION_DATA_GROUP";
"khotkeysrc"."Data_2_7Conditions"."Comment" = "Konqueror window";
"khotkeysrc"."Data_2_7Conditions"."ConditionsCount" = 1;
"khotkeysrc"."Data_2_7Conditions0"."Type" = "ACTIVE_WINDOW";
"khotkeysrc"."Data_2_7Conditions0Window"."Comment" = "Konqueror";
"khotkeysrc"."Data_2_7Conditions0Window"."WindowsCount" = 1;
"khotkeysrc"."Data_2_7Conditions0Window0"."Class" = "konqueror";
"khotkeysrc"."Data_2_7Conditions0Window0"."ClassType" = 1;
"khotkeysrc"."Data_2_7Conditions0Window0"."Comment" = "Konqueror";
"khotkeysrc"."Data_2_7Conditions0Window0"."Role" = "";
"khotkeysrc"."Data_2_7Conditions0Window0"."RoleType" = 0;
"khotkeysrc"."Data_2_7Conditions0Window0"."Title" = "";
"khotkeysrc"."Data_2_7Conditions0Window0"."TitleType" = 0;
"khotkeysrc"."Data_2_7Conditions0Window0"."Type" = "SIMPLE";
"khotkeysrc"."Data_2_7Conditions0Window0"."WindowTypes" = 33;
"khotkeysrc"."Data_2_7_1"."Comment" = "";
"khotkeysrc"."Data_2_7_1"."Enabled" = false;
"khotkeysrc"."Data_2_7_1"."Name" = "Back";
"khotkeysrc"."Data_2_7_1"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_7_1Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_7_1Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_2_7_1Actions0"."Input" = "Alt+Left";
"khotkeysrc"."Data_2_7_1Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_2_7_1Conditions"."Comment" = "";
"khotkeysrc"."Data_2_7_1Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_7_1Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_2_7_1Triggers"."TriggersCount" = 3;
"khotkeysrc"."Data_2_7_1Triggers0"."GesturePointData" = "0,0.0625,1,1,0.5,0.0625,0.0625,1,0.875,0.5,0.125,0.0625,1,0.75,0.5,0.1875,0.0625,1,0.625,0.5,0.25,0.0625,1,0.5,0.5,0.3125,0.0625,1,0.375,0.5,0.375,0.0625,1,0.25,0.5,0.4375,0.0625,1,0.125,0.5,0.5,0.0625,0,0,0.5,0.5625,0.0625,0,0.125,0.5,0.625,0.0625,0,0.25,0.5,0.6875,0.0625,0,0.375,0.5,0.75,0.0625,0,0.5,0.5,0.8125,0.0625,0,0.625,0.5,0.875,0.0625,0,0.75,0.5,0.9375,0.0625,0,0.875,0.5,1,0,0,1,0.5";
"khotkeysrc"."Data_2_7_1Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_1Triggers1"."GesturePointData" = "0,0.0833333,1,0.5,0.5,0.0833333,0.0833333,1,0.375,0.5,0.166667,0.0833333,1,0.25,0.5,0.25,0.0833333,1,0.125,0.5,0.333333,0.0833333,0,0,0.5,0.416667,0.0833333,0,0.125,0.5,0.5,0.0833333,0,0.25,0.5,0.583333,0.0833333,0,0.375,0.5,0.666667,0.0833333,0,0.5,0.5,0.75,0.0833333,0,0.625,0.5,0.833333,0.0833333,0,0.75,0.5,0.916667,0.0833333,0,0.875,0.5,1,0,0,1,0.5";
"khotkeysrc"."Data_2_7_1Triggers1"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_1Triggers2"."GesturePointData" = "0,0.0833333,1,1,0.5,0.0833333,0.0833333,1,0.875,0.5,0.166667,0.0833333,1,0.75,0.5,0.25,0.0833333,1,0.625,0.5,0.333333,0.0833333,1,0.5,0.5,0.416667,0.0833333,1,0.375,0.5,0.5,0.0833333,1,0.25,0.5,0.583333,0.0833333,1,0.125,0.5,0.666667,0.0833333,0,0,0.5,0.75,0.0833333,0,0.125,0.5,0.833333,0.0833333,0,0.25,0.5,0.916667,0.0833333,0,0.375,0.5,1,0,0,0.5,0.5";
"khotkeysrc"."Data_2_7_1Triggers2"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_2"."Comment" = "";
"khotkeysrc"."Data_2_7_2"."Enabled" = false;
"khotkeysrc"."Data_2_7_2"."Name" = "Forward";
"khotkeysrc"."Data_2_7_2"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_7_2Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_7_2Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_2_7_2Actions0"."Input" = "Alt+Right";
"khotkeysrc"."Data_2_7_2Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_2_7_2Conditions"."Comment" = "";
"khotkeysrc"."Data_2_7_2Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_7_2Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_2_7_2Triggers"."TriggersCount" = 3;
"khotkeysrc"."Data_2_7_2Triggers0"."GesturePointData" = "0,0.0625,0,0,0.5,0.0625,0.0625,0,0.125,0.5,0.125,0.0625,0,0.25,0.5,0.1875,0.0625,0,0.375,0.5,0.25,0.0625,0,0.5,0.5,0.3125,0.0625,0,0.625,0.5,0.375,0.0625,0,0.75,0.5,0.4375,0.0625,0,0.875,0.5,0.5,0.0625,1,1,0.5,0.5625,0.0625,1,0.875,0.5,0.625,0.0625,1,0.75,0.5,0.6875,0.0625,1,0.625,0.5,0.75,0.0625,1,0.5,0.5,0.8125,0.0625,1,0.375,0.5,0.875,0.0625,1,0.25,0.5,0.9375,0.0625,1,0.125,0.5,1,0,0,0,0.5";
"khotkeysrc"."Data_2_7_2Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_2Triggers1"."GesturePointData" = "0,0.0833333,0,0.5,0.5,0.0833333,0.0833333,0,0.625,0.5,0.166667,0.0833333,0,0.75,0.5,0.25,0.0833333,0,0.875,0.5,0.333333,0.0833333,1,1,0.5,0.416667,0.0833333,1,0.875,0.5,0.5,0.0833333,1,0.75,0.5,0.583333,0.0833333,1,0.625,0.5,0.666667,0.0833333,1,0.5,0.5,0.75,0.0833333,1,0.375,0.5,0.833333,0.0833333,1,0.25,0.5,0.916667,0.0833333,1,0.125,0.5,1,0,0,0,0.5";
"khotkeysrc"."Data_2_7_2Triggers1"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_2Triggers2"."GesturePointData" = "0,0.0833333,0,0,0.5,0.0833333,0.0833333,0,0.125,0.5,0.166667,0.0833333,0,0.25,0.5,0.25,0.0833333,0,0.375,0.5,0.333333,0.0833333,0,0.5,0.5,0.416667,0.0833333,0,0.625,0.5,0.5,0.0833333,0,0.75,0.5,0.583333,0.0833333,0,0.875,0.5,0.666667,0.0833333,1,1,0.5,0.75,0.0833333,1,0.875,0.5,0.833333,0.0833333,1,0.75,0.5,0.916667,0.0833333,1,0.625,0.5,1,0,0,0.5,0.5";
"khotkeysrc"."Data_2_7_2Triggers2"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_3"."Comment" = "";
"khotkeysrc"."Data_2_7_3"."Enabled" = false;
"khotkeysrc"."Data_2_7_3"."Name" = "Up";
"khotkeysrc"."Data_2_7_3"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_7_3Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_7_3Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_2_7_3Actions0"."Input" = "Alt+Up";
"khotkeysrc"."Data_2_7_3Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_2_7_3Conditions"."Comment" = "";
"khotkeysrc"."Data_2_7_3Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_7_3Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_2_7_3Triggers"."TriggersCount" = 3;
"khotkeysrc"."Data_2_7_3Triggers0"."GesturePointData" = "0,0.0625,-0.5,0.5,1,0.0625,0.0625,-0.5,0.5,0.875,0.125,0.0625,-0.5,0.5,0.75,0.1875,0.0625,-0.5,0.5,0.625,0.25,0.0625,-0.5,0.5,0.5,0.3125,0.0625,-0.5,0.5,0.375,0.375,0.0625,-0.5,0.5,0.25,0.4375,0.0625,-0.5,0.5,0.125,0.5,0.0625,0.5,0.5,0,0.5625,0.0625,0.5,0.5,0.125,0.625,0.0625,0.5,0.5,0.25,0.6875,0.0625,0.5,0.5,0.375,0.75,0.0625,0.5,0.5,0.5,0.8125,0.0625,0.5,0.5,0.625,0.875,0.0625,0.5,0.5,0.75,0.9375,0.0625,0.5,0.5,0.875,1,0,0,0.5,1";
"khotkeysrc"."Data_2_7_3Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_3Triggers1"."GesturePointData" = "0,0.0833333,-0.5,0.5,1,0.0833333,0.0833333,-0.5,0.5,0.875,0.166667,0.0833333,-0.5,0.5,0.75,0.25,0.0833333,-0.5,0.5,0.625,0.333333,0.0833333,-0.5,0.5,0.5,0.416667,0.0833333,-0.5,0.5,0.375,0.5,0.0833333,-0.5,0.5,0.25,0.583333,0.0833333,-0.5,0.5,0.125,0.666667,0.0833333,0.5,0.5,0,0.75,0.0833333,0.5,0.5,0.125,0.833333,0.0833333,0.5,0.5,0.25,0.916667,0.0833333,0.5,0.5,0.375,1,0,0,0.5,0.5";
"khotkeysrc"."Data_2_7_3Triggers1"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_3Triggers2"."GesturePointData" = "0,0.0833333,-0.5,0.5,0.5,0.0833333,0.0833333,-0.5,0.5,0.375,0.166667,0.0833333,-0.5,0.5,0.25,0.25,0.0833333,-0.5,0.5,0.125,0.333333,0.0833333,0.5,0.5,0,0.416667,0.0833333,0.5,0.5,0.125,0.5,0.0833333,0.5,0.5,0.25,0.583333,0.0833333,0.5,0.5,0.375,0.666667,0.0833333,0.5,0.5,0.5,0.75,0.0833333,0.5,0.5,0.625,0.833333,0.0833333,0.5,0.5,0.75,0.916667,0.0833333,0.5,0.5,0.875,1,0,0,0.5,1";
"khotkeysrc"."Data_2_7_3Triggers2"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_4"."Comment" = "";
"khotkeysrc"."Data_2_7_4"."Enabled" = false;
"khotkeysrc"."Data_2_7_4"."Name" = "Reload";
"khotkeysrc"."Data_2_7_4"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_7_4Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_7_4Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_2_7_4Actions0"."Input" = "F5";
"khotkeysrc"."Data_2_7_4Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_2_7_4Conditions"."Comment" = "";
"khotkeysrc"."Data_2_7_4Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_7_4Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_2_7_4Triggers"."TriggersCount" = 3;
"khotkeysrc"."Data_2_7_4Triggers0"."GesturePointData" = "0,0.03125,0,0,1,0.03125,0.03125,0,0.125,1,0.0625,0.03125,0,0.25,1,0.09375,0.03125,0,0.375,1,0.125,0.03125,0,0.5,1,0.15625,0.03125,0,0.625,1,0.1875,0.03125,0,0.75,1,0.21875,0.03125,0,0.875,1,0.25,0.03125,-0.5,1,1,0.28125,0.03125,-0.5,1,0.875,0.3125,0.03125,-0.5,1,0.75,0.34375,0.03125,-0.5,1,0.625,0.375,0.03125,-0.5,1,0.5,0.40625,0.03125,-0.5,1,0.375,0.4375,0.03125,-0.5,1,0.25,0.46875,0.03125,-0.5,1,0.125,0.5,0.03125,1,1,0,0.53125,0.03125,1,0.875,0,0.5625,0.03125,1,0.75,0,0.59375,0.03125,1,0.625,0,0.625,0.03125,1,0.5,0,0.65625,0.03125,1,0.375,0,0.6875,0.03125,1,0.25,0,0.71875,0.03125,1,0.125,0,0.75,0.03125,0.5,0,0,0.78125,0.03125,0.5,0,0.125,0.8125,0.03125,0.5,0,0.25,0.84375,0.03125,0.5,0,0.375,0.875,0.03125,0.5,0,0.5,0.90625,0.03125,0.5,0,0.625,0.9375,0.03125,0.5,0,0.75,0.96875,0.03125,0.5,0,0.875,1,0,0,0,1";
"khotkeysrc"."Data_2_7_4Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_4Triggers1"."GesturePointData" = "0,0.0277778,0,0,1,0.0277778,0.0277778,0,0.125,1,0.0555556,0.0277778,0,0.25,1,0.0833333,0.0277778,0,0.375,1,0.111111,0.0277778,0,0.5,1,0.138889,0.0277778,0,0.625,1,0.166667,0.0277778,0,0.75,1,0.194444,0.0277778,0,0.875,1,0.222222,0.0277778,-0.5,1,1,0.25,0.0277778,-0.5,1,0.875,0.277778,0.0277778,-0.5,1,0.75,0.305556,0.0277778,-0.5,1,0.625,0.333333,0.0277778,-0.5,1,0.5,0.361111,0.0277778,-0.5,1,0.375,0.388889,0.0277778,-0.5,1,0.25,0.416667,0.0277778,-0.5,1,0.125,0.444444,0.0277778,1,1,0,0.472222,0.0277778,1,0.875,0,0.5,0.0277778,1,0.75,0,0.527778,0.0277778,1,0.625,0,0.555556,0.0277778,1,0.5,0,0.583333,0.0277778,1,0.375,0,0.611111,0.0277778,1,0.25,0,0.638889,0.0277778,1,0.125,0,0.666667,0.0277778,0.5,0,0,0.694444,0.0277778,0.5,0,0.125,0.722222,0.0277778,0.5,0,0.25,0.75,0.0277778,0.5,0,0.375,0.777778,0.0277778,0.5,0,0.5,0.805556,0.0277778,0.5,0,0.625,0.833333,0.0277778,0.5,0,0.75,0.861111,0.0277778,0.5,0,0.875,0.888889,0.0277778,0,0,1,0.916667,0.0277778,0,0.125,1,0.944444,0.0277778,0,0.25,1,0.972222,0.0277778,0,0.375,1,1,0,0,0.5,1";
"khotkeysrc"."Data_2_7_4Triggers1"."Type" = "GESTURE";
"khotkeysrc"."Data_2_7_4Triggers2"."GesturePointData" = "0,0.0277778,0.5,0,0.5,0.0277778,0.0277778,0.5,0,0.625,0.0555556,0.0277778,0.5,0,0.75,0.0833333,0.0277778,0.5,0,0.875,0.111111,0.0277778,0,0,1,0.138889,0.0277778,0,0.125,1,0.166667,0.0277778,0,0.25,1,0.194444,0.0277778,0,0.375,1,0.222222,0.0277778,0,0.5,1,0.25,0.0277778,0,0.625,1,0.277778,0.0277778,0,0.75,1,0.305556,0.0277778,0,0.875,1,0.333333,0.0277778,-0.5,1,1,0.361111,0.0277778,-0.5,1,0.875,0.388889,0.0277778,-0.5,1,0.75,0.416667,0.0277778,-0.5,1,0.625,0.444444,0.0277778,-0.5,1,0.5,0.472222,0.0277778,-0.5,1,0.375,0.5,0.0277778,-0.5,1,0.25,0.527778,0.0277778,-0.5,1,0.125,0.555556,0.0277778,1,1,0,0.583333,0.0277778,1,0.875,0,0.611111,0.0277778,1,0.75,0,0.638889,0.0277778,1,0.625,0,0.666667,0.0277778,1,0.5,0,0.694444,0.0277778,1,0.375,0,0.722222,0.0277778,1,0.25,0,0.75,0.0277778,1,0.125,0,0.777778,0.0277778,0.5,0,0,0.805556,0.0277778,0.5,0,0.125,0.833333,0.0277778,0.5,0,0.25,0.861111,0.0277778,0.5,0,0.375,0.888889,0.0277778,0.5,0,0.5,0.916667,0.0277778,0.5,0,0.625,0.944444,0.0277778,0.5,0,0.75,0.972222,0.0277778,0.5,0,0.875,1,0,0,0,1";
"khotkeysrc"."Data_2_7_4Triggers2"."Type" = "GESTURE";
"khotkeysrc"."Data_2_8"."Comment" = "After pressing Win+E (Tux+E) a WWW browser will be launched, and it will open http://www.kde.org . You may run all kind of commands you can run in minicli (Alt+F2).";
"khotkeysrc"."Data_2_8"."Enabled" = false;
"khotkeysrc"."Data_2_8"."Name" = "Go to KDE Website";
"khotkeysrc"."Data_2_8"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_2_8Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_2_8Actions0"."CommandURL" = "http://www.kde.org";
"khotkeysrc"."Data_2_8Actions0"."Type" = "COMMAND_URL";
"khotkeysrc"."Data_2_8Conditions"."Comment" = "";
"khotkeysrc"."Data_2_8Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_2_8Triggers"."Comment" = "Simple_action";
"khotkeysrc"."Data_2_8Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_2_8Triggers0"."Key" = "Meta+E";
"khotkeysrc"."Data_2_8Triggers0"."Type" = "SHORTCUT";
"khotkeysrc"."Data_2_8Triggers0"."Uuid" = "{01088b4f-cb8e-4f32-9b6e-fc5c20408aa1}";
"khotkeysrc"."Data_3"."Comment" = "Basic Konqueror gestures.";
"khotkeysrc"."Data_3"."DataCount" = 14;
"khotkeysrc"."Data_3"."Enabled" = true;
"khotkeysrc"."Data_3"."ImportId" = "konqueror_gestures_kde321";
"khotkeysrc"."Data_3"."Name" = "Konqueror Gestures";
"khotkeysrc"."Data_3"."SystemGroup" = 0;
"khotkeysrc"."Data_3"."Type" = "ACTION_DATA_GROUP";
"khotkeysrc"."Data_3Conditions"."Comment" = "Konqueror window";
"khotkeysrc"."Data_3Conditions"."ConditionsCount" = 1;
"khotkeysrc"."Data_3Conditions0"."Type" = "ACTIVE_WINDOW";
"khotkeysrc"."Data_3Conditions0Window"."Comment" = "Konqueror";
"khotkeysrc"."Data_3Conditions0Window"."WindowsCount" = 1;
"khotkeysrc"."Data_3Conditions0Window0"."Class" = "^konqueror\s";
"khotkeysrc"."Data_3Conditions0Window0"."ClassType" = 3;
"khotkeysrc"."Data_3Conditions0Window0"."Comment" = "Konqueror";
"khotkeysrc"."Data_3Conditions0Window0"."Role" = "konqueror-mainwindow#1";
"khotkeysrc"."Data_3Conditions0Window0"."RoleType" = 0;
"khotkeysrc"."Data_3Conditions0Window0"."Title" = "file:/ - Konqueror";
"khotkeysrc"."Data_3Conditions0Window0"."TitleType" = 0;
"khotkeysrc"."Data_3Conditions0Window0"."Type" = "SIMPLE";
"khotkeysrc"."Data_3Conditions0Window0"."WindowTypes" = 1;
"khotkeysrc"."Data_3_1"."Comment" = "Press, move left, release.";
"khotkeysrc"."Data_3_1"."Enabled" = true;
"khotkeysrc"."Data_3_1"."Name" = "Back";
"khotkeysrc"."Data_3_1"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_10"."Comment" = "Opera-style: Press, move up, release.\nNOTE: Conflicts with 'New Tab', and as such is disabled by default.";
"khotkeysrc"."Data_3_10"."Enabled" = false;
"khotkeysrc"."Data_3_10"."Name" = "Stop Loading";
"khotkeysrc"."Data_3_10"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_10Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_10Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_10Actions0"."Input" = "Escape\n";
"khotkeysrc"."Data_3_10Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_10Conditions"."Comment" = "";
"khotkeysrc"."Data_3_10Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_10Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_10Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_10Triggers0"."GesturePointData" = "0,0.125,-0.5,0.5,1,0.125,0.125,-0.5,0.5,0.875,0.25,0.125,-0.5,0.5,0.75,0.375,0.125,-0.5,0.5,0.625,0.5,0.125,-0.5,0.5,0.5,0.625,0.125,-0.5,0.5,0.375,0.75,0.125,-0.5,0.5,0.25,0.875,0.125,-0.5,0.5,0.125,1,0,0,0.5,0";
"khotkeysrc"."Data_3_10Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_11"."Comment" = "Going up in URL/directory structure.\nMozilla-style: Press, move up, move left, move up, release.";
"khotkeysrc"."Data_3_11"."Enabled" = true;
"khotkeysrc"."Data_3_11"."Name" = "Up";
"khotkeysrc"."Data_3_11"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_11Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_11Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_11Actions0"."Input" = "Alt+Up";
"khotkeysrc"."Data_3_11Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_11Conditions"."Comment" = "";
"khotkeysrc"."Data_3_11Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_11Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_11Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_11Triggers0"."GesturePointData" = "0,0.0625,-0.5,1,1,0.0625,0.0625,-0.5,1,0.875,0.125,0.0625,-0.5,1,0.75,0.1875,0.0625,-0.5,1,0.625,0.25,0.0625,1,1,0.5,0.3125,0.0625,1,0.875,0.5,0.375,0.0625,1,0.75,0.5,0.4375,0.0625,1,0.625,0.5,0.5,0.0625,1,0.5,0.5,0.5625,0.0625,1,0.375,0.5,0.625,0.0625,1,0.25,0.5,0.6875,0.0625,1,0.125,0.5,0.75,0.0625,-0.5,0,0.5,0.8125,0.0625,-0.5,0,0.375,0.875,0.0625,-0.5,0,0.25,0.9375,0.0625,-0.5,0,0.125,1,0,0,0,0";
"khotkeysrc"."Data_3_11Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_12"."Comment" = "Going up in URL/directory structure.\nOpera-style: Press, move up, move left, move up, release.\nNOTE: Conflicts with \"Activate Previous Tab\", and as such is disabled by default.";
"khotkeysrc"."Data_3_12"."Enabled" = false;
"khotkeysrc"."Data_3_12"."Name" = "Up #2";
"khotkeysrc"."Data_3_12"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_12Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_12Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_12Actions0"."Input" = "Alt+Up\n";
"khotkeysrc"."Data_3_12Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_12Conditions"."Comment" = "";
"khotkeysrc"."Data_3_12Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_12Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_12Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_12Triggers0"."GesturePointData" = "0,0.0625,-0.5,1,1,0.0625,0.0625,-0.5,1,0.875,0.125,0.0625,-0.5,1,0.75,0.1875,0.0625,-0.5,1,0.625,0.25,0.0625,-0.5,1,0.5,0.3125,0.0625,-0.5,1,0.375,0.375,0.0625,-0.5,1,0.25,0.4375,0.0625,-0.5,1,0.125,0.5,0.0625,1,1,0,0.5625,0.0625,1,0.875,0,0.625,0.0625,1,0.75,0,0.6875,0.0625,1,0.625,0,0.75,0.0625,1,0.5,0,0.8125,0.0625,1,0.375,0,0.875,0.0625,1,0.25,0,0.9375,0.0625,1,0.125,0,1,0,0,0,0";
"khotkeysrc"."Data_3_12Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_13"."Comment" = "Press, move up, move right, release.";
"khotkeysrc"."Data_3_13"."Enabled" = true;
"khotkeysrc"."Data_3_13"."Name" = "Activate Next Tab";
"khotkeysrc"."Data_3_13"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_13Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_13Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_13Actions0"."Input" = "Ctrl+.\n";
"khotkeysrc"."Data_3_13Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_13Conditions"."Comment" = "";
"khotkeysrc"."Data_3_13Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_13Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_13Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_13Triggers0"."GesturePointData" = "0,0.0625,-0.5,0,1,0.0625,0.0625,-0.5,0,0.875,0.125,0.0625,-0.5,0,0.75,0.1875,0.0625,-0.5,0,0.625,0.25,0.0625,-0.5,0,0.5,0.3125,0.0625,-0.5,0,0.375,0.375,0.0625,-0.5,0,0.25,0.4375,0.0625,-0.5,0,0.125,0.5,0.0625,0,0,0,0.5625,0.0625,0,0.125,0,0.625,0.0625,0,0.25,0,0.6875,0.0625,0,0.375,0,0.75,0.0625,0,0.5,0,0.8125,0.0625,0,0.625,0,0.875,0.0625,0,0.75,0,0.9375,0.0625,0,0.875,0,1,0,0,1,0";
"khotkeysrc"."Data_3_13Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_14"."Comment" = "Press, move up, move left, release.";
"khotkeysrc"."Data_3_14"."Enabled" = true;
"khotkeysrc"."Data_3_14"."Name" = "Activate Previous Tab";
"khotkeysrc"."Data_3_14"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_14Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_14Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_14Actions0"."Input" = "Ctrl+,";
"khotkeysrc"."Data_3_14Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_14Conditions"."Comment" = "";
"khotkeysrc"."Data_3_14Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_14Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_14Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_14Triggers0"."GesturePointData" = "0,0.0625,-0.5,1,1,0.0625,0.0625,-0.5,1,0.875,0.125,0.0625,-0.5,1,0.75,0.1875,0.0625,-0.5,1,0.625,0.25,0.0625,-0.5,1,0.5,0.3125,0.0625,-0.5,1,0.375,0.375,0.0625,-0.5,1,0.25,0.4375,0.0625,-0.5,1,0.125,0.5,0.0625,1,1,0,0.5625,0.0625,1,0.875,0,0.625,0.0625,1,0.75,0,0.6875,0.0625,1,0.625,0,0.75,0.0625,1,0.5,0,0.8125,0.0625,1,0.375,0,0.875,0.0625,1,0.25,0,0.9375,0.0625,1,0.125,0,1,0,0,0,0";
"khotkeysrc"."Data_3_14Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_1Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_1Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_1Actions0"."Input" = "Alt+Left";
"khotkeysrc"."Data_3_1Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_1Conditions"."Comment" = "";
"khotkeysrc"."Data_3_1Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_1Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_1Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_1Triggers0"."GesturePointData" = "0,0.125,1,1,0.5,0.125,0.125,1,0.875,0.5,0.25,0.125,1,0.75,0.5,0.375,0.125,1,0.625,0.5,0.5,0.125,1,0.5,0.5,0.625,0.125,1,0.375,0.5,0.75,0.125,1,0.25,0.5,0.875,0.125,1,0.125,0.5,1,0,0,0,0.5";
"khotkeysrc"."Data_3_1Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_2"."Comment" = "Press, move down, move up, move down, release.";
"khotkeysrc"."Data_3_2"."Enabled" = true;
"khotkeysrc"."Data_3_2"."Name" = "Duplicate Tab";
"khotkeysrc"."Data_3_2"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_2Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_2Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_2Actions0"."Input" = "Ctrl+Shift+D\n";
"khotkeysrc"."Data_3_2Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_2Conditions"."Comment" = "";
"khotkeysrc"."Data_3_2Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_2Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_2Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_2Triggers0"."GesturePointData" = "0,0.0416667,0.5,0.5,0,0.0416667,0.0416667,0.5,0.5,0.125,0.0833333,0.0416667,0.5,0.5,0.25,0.125,0.0416667,0.5,0.5,0.375,0.166667,0.0416667,0.5,0.5,0.5,0.208333,0.0416667,0.5,0.5,0.625,0.25,0.0416667,0.5,0.5,0.75,0.291667,0.0416667,0.5,0.5,0.875,0.333333,0.0416667,-0.5,0.5,1,0.375,0.0416667,-0.5,0.5,0.875,0.416667,0.0416667,-0.5,0.5,0.75,0.458333,0.0416667,-0.5,0.5,0.625,0.5,0.0416667,-0.5,0.5,0.5,0.541667,0.0416667,-0.5,0.5,0.375,0.583333,0.0416667,-0.5,0.5,0.25,0.625,0.0416667,-0.5,0.5,0.125,0.666667,0.0416667,0.5,0.5,0,0.708333,0.0416667,0.5,0.5,0.125,0.75,0.0416667,0.5,0.5,0.25,0.791667,0.0416667,0.5,0.5,0.375,0.833333,0.0416667,0.5,0.5,0.5,0.875,0.0416667,0.5,0.5,0.625,0.916667,0.0416667,0.5,0.5,0.75,0.958333,0.0416667,0.5,0.5,0.875,1,0,0,0.5,1";
"khotkeysrc"."Data_3_2Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_3"."Comment" = "Press, move down, move up, release.";
"khotkeysrc"."Data_3_3"."Enabled" = true;
"khotkeysrc"."Data_3_3"."Name" = "Duplicate Window";
"khotkeysrc"."Data_3_3"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_3Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_3Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_3Actions0"."Input" = "Ctrl+D\n";
"khotkeysrc"."Data_3_3Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_3Conditions"."Comment" = "";
"khotkeysrc"."Data_3_3Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_3Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_3Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_3Triggers0"."GesturePointData" = "0,0.0625,0.5,0.5,0,0.0625,0.0625,0.5,0.5,0.125,0.125,0.0625,0.5,0.5,0.25,0.1875,0.0625,0.5,0.5,0.375,0.25,0.0625,0.5,0.5,0.5,0.3125,0.0625,0.5,0.5,0.625,0.375,0.0625,0.5,0.5,0.75,0.4375,0.0625,0.5,0.5,0.875,0.5,0.0625,-0.5,0.5,1,0.5625,0.0625,-0.5,0.5,0.875,0.625,0.0625,-0.5,0.5,0.75,0.6875,0.0625,-0.5,0.5,0.625,0.75,0.0625,-0.5,0.5,0.5,0.8125,0.0625,-0.5,0.5,0.375,0.875,0.0625,-0.5,0.5,0.25,0.9375,0.0625,-0.5,0.5,0.125,1,0,0,0.5,0";
"khotkeysrc"."Data_3_3Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_4"."Comment" = "Press, move right, release.";
"khotkeysrc"."Data_3_4"."Enabled" = true;
"khotkeysrc"."Data_3_4"."Name" = "Forward";
"khotkeysrc"."Data_3_4"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_4Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_4Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_4Actions0"."Input" = "Alt+Right";
"khotkeysrc"."Data_3_4Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_4Conditions"."Comment" = "";
"khotkeysrc"."Data_3_4Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_4Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_4Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_4Triggers0"."GesturePointData" = "0,0.125,0,0,0.5,0.125,0.125,0,0.125,0.5,0.25,0.125,0,0.25,0.5,0.375,0.125,0,0.375,0.5,0.5,0.125,0,0.5,0.5,0.625,0.125,0,0.625,0.5,0.75,0.125,0,0.75,0.5,0.875,0.125,0,0.875,0.5,1,0,0,1,0.5";
"khotkeysrc"."Data_3_4Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_5"."Comment" = "Press, move down, move half up, move right, move down, release.\n(Drawing a lowercase 'h'.)";
"khotkeysrc"."Data_3_5"."Enabled" = true;
"khotkeysrc"."Data_3_5"."Name" = "Home";
"khotkeysrc"."Data_3_5"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_5Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_5Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_5Actions0"."Input" = "Alt+Home\n";
"khotkeysrc"."Data_3_5Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_5Conditions"."Comment" = "";
"khotkeysrc"."Data_3_5Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_5Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_5Triggers"."TriggersCount" = 2;
"khotkeysrc"."Data_3_5Triggers0"."GesturePointData" = "0,0.0461748,0.5,0,0,0.0461748,0.0461748,0.5,0,0.125,0.0923495,0.0461748,0.5,0,0.25,0.138524,0.0461748,0.5,0,0.375,0.184699,0.0461748,0.5,0,0.5,0.230874,0.0461748,0.5,0,0.625,0.277049,0.0461748,0.5,0,0.75,0.323223,0.0461748,0.5,0,0.875,0.369398,0.065301,-0.25,0,1,0.434699,0.065301,-0.25,0.125,0.875,0.5,0.065301,-0.25,0.25,0.75,0.565301,0.065301,-0.25,0.375,0.625,0.630602,0.0461748,0,0.5,0.5,0.676777,0.0461748,0,0.625,0.5,0.722951,0.0461748,0,0.75,0.5,0.769126,0.0461748,0,0.875,0.5,0.815301,0.0461748,0.5,1,0.5,0.861476,0.0461748,0.5,1,0.625,0.90765,0.0461748,0.5,1,0.75,0.953825,0.0461748,0.5,1,0.875,1,0,0,1,1";
"khotkeysrc"."Data_3_5Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_5Triggers1"."GesturePointData" = "0,0.0416667,0.5,0,0,0.0416667,0.0416667,0.5,0,0.125,0.0833333,0.0416667,0.5,0,0.25,0.125,0.0416667,0.5,0,0.375,0.166667,0.0416667,0.5,0,0.5,0.208333,0.0416667,0.5,0,0.625,0.25,0.0416667,0.5,0,0.75,0.291667,0.0416667,0.5,0,0.875,0.333333,0.0416667,-0.5,0,1,0.375,0.0416667,-0.5,0,0.875,0.416667,0.0416667,-0.5,0,0.75,0.458333,0.0416667,-0.5,0,0.625,0.5,0.0416667,0,0,0.5,0.541667,0.0416667,0,0.125,0.5,0.583333,0.0416667,0,0.25,0.5,0.625,0.0416667,0,0.375,0.5,0.666667,0.0416667,0,0.5,0.5,0.708333,0.0416667,0,0.625,0.5,0.75,0.0416667,0,0.75,0.5,0.791667,0.0416667,0,0.875,0.5,0.833333,0.0416667,0.5,1,0.5,0.875,0.0416667,0.5,1,0.625,0.916667,0.0416667,0.5,1,0.75,0.958333,0.0416667,0.5,1,0.875,1,0,0,1,1";
"khotkeysrc"."Data_3_5Triggers1"."Type" = "GESTURE";
"khotkeysrc"."Data_3_6"."Comment" = "Press, move right, move down, move right, release.\nMozilla-style: Press, move down, move right, release.";
"khotkeysrc"."Data_3_6"."Enabled" = true;
"khotkeysrc"."Data_3_6"."Name" = "Close Tab";
"khotkeysrc"."Data_3_6"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_6Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_6Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_6Actions0"."Input" = "Ctrl+W\n";
"khotkeysrc"."Data_3_6Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_6Conditions"."Comment" = "";
"khotkeysrc"."Data_3_6Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_6Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_6Triggers"."TriggersCount" = 2;
"khotkeysrc"."Data_3_6Triggers0"."GesturePointData" = "0,0.0625,0,0,0,0.0625,0.0625,0,0.125,0,0.125,0.0625,0,0.25,0,0.1875,0.0625,0,0.375,0,0.25,0.0625,0.5,0.5,0,0.3125,0.0625,0.5,0.5,0.125,0.375,0.0625,0.5,0.5,0.25,0.4375,0.0625,0.5,0.5,0.375,0.5,0.0625,0.5,0.5,0.5,0.5625,0.0625,0.5,0.5,0.625,0.625,0.0625,0.5,0.5,0.75,0.6875,0.0625,0.5,0.5,0.875,0.75,0.0625,0,0.5,1,0.8125,0.0625,0,0.625,1,0.875,0.0625,0,0.75,1,0.9375,0.0625,0,0.875,1,1,0,0,1,1";
"khotkeysrc"."Data_3_6Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_6Triggers1"."GesturePointData" = "0,0.0625,0.5,0,0,0.0625,0.0625,0.5,0,0.125,0.125,0.0625,0.5,0,0.25,0.1875,0.0625,0.5,0,0.375,0.25,0.0625,0.5,0,0.5,0.3125,0.0625,0.5,0,0.625,0.375,0.0625,0.5,0,0.75,0.4375,0.0625,0.5,0,0.875,0.5,0.0625,0,0,1,0.5625,0.0625,0,0.125,1,0.625,0.0625,0,0.25,1,0.6875,0.0625,0,0.375,1,0.75,0.0625,0,0.5,1,0.8125,0.0625,0,0.625,1,0.875,0.0625,0,0.75,1,0.9375,0.0625,0,0.875,1,1,0,0,1,1";
"khotkeysrc"."Data_3_6Triggers1"."Type" = "GESTURE";
"khotkeysrc"."Data_3_7"."Comment" = "Press, move up, release.\nConflicts with Opera-style 'Up #2', which is disabled by default.";
"khotkeysrc"."Data_3_7"."Enabled" = true;
"khotkeysrc"."Data_3_7"."Name" = "New Tab";
"khotkeysrc"."Data_3_7"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_7Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_7Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_7Actions0"."Input" = "Ctrl+Shift+N";
"khotkeysrc"."Data_3_7Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_7Conditions"."Comment" = "";
"khotkeysrc"."Data_3_7Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_7Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_7Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_7Triggers0"."GesturePointData" = "0,0.125,-0.5,0.5,1,0.125,0.125,-0.5,0.5,0.875,0.25,0.125,-0.5,0.5,0.75,0.375,0.125,-0.5,0.5,0.625,0.5,0.125,-0.5,0.5,0.5,0.625,0.125,-0.5,0.5,0.375,0.75,0.125,-0.5,0.5,0.25,0.875,0.125,-0.5,0.5,0.125,1,0,0,0.5,0";
"khotkeysrc"."Data_3_7Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_8"."Comment" = "Press, move down, release.";
"khotkeysrc"."Data_3_8"."Enabled" = true;
"khotkeysrc"."Data_3_8"."Name" = "New Window";
"khotkeysrc"."Data_3_8"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_8Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_8Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_8Actions0"."Input" = "Ctrl+N\n";
"khotkeysrc"."Data_3_8Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_8Conditions"."Comment" = "";
"khotkeysrc"."Data_3_8Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_8Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_8Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_8Triggers0"."GesturePointData" = "0,0.125,0.5,0.5,0,0.125,0.125,0.5,0.5,0.125,0.25,0.125,0.5,0.5,0.25,0.375,0.125,0.5,0.5,0.375,0.5,0.125,0.5,0.5,0.5,0.625,0.125,0.5,0.5,0.625,0.75,0.125,0.5,0.5,0.75,0.875,0.125,0.5,0.5,0.875,1,0,0,0.5,1";
"khotkeysrc"."Data_3_8Triggers0"."Type" = "GESTURE";
"khotkeysrc"."Data_3_9"."Comment" = "Press, move up, move down, release.";
"khotkeysrc"."Data_3_9"."Enabled" = true;
"khotkeysrc"."Data_3_9"."Name" = "Reload";
"khotkeysrc"."Data_3_9"."Type" = "SIMPLE_ACTION_DATA";
"khotkeysrc"."Data_3_9Actions"."ActionsCount" = 1;
"khotkeysrc"."Data_3_9Actions0"."DestinationWindow" = 2;
"khotkeysrc"."Data_3_9Actions0"."Input" = "F5";
"khotkeysrc"."Data_3_9Actions0"."Type" = "KEYBOARD_INPUT";
"khotkeysrc"."Data_3_9Conditions"."Comment" = "";
"khotkeysrc"."Data_3_9Conditions"."ConditionsCount" = 0;
"khotkeysrc"."Data_3_9Triggers"."Comment" = "Gesture_triggers";
"khotkeysrc"."Data_3_9Triggers"."TriggersCount" = 1;
"khotkeysrc"."Data_3_9Triggers0"."GesturePointData" = "0,0.0625,-0.5,0.5,1,0.0625,0.0625,-0.5,0.5,0.875,0.125,0.0625,-0.5,0.5,0.75,0.1875,0.0625,-0.5,0.5,0.625,0.25,0.0625,-0.5,0.5,0.5,0.3125,0.0625,-0.5,0.5,0.375,0.375,0.0625,-0.5,0.5,0.25,0.4375,0.0625,-0.5,0.5,0.125,0.5,0.0625,0.5,0.5,0,0.5625,0.0625,0.5,0.5,0.125,0.625,0.0625,0.5,0.5,0.25,0.6875,0.0625,0.5,0.5,0.375,0.75,0.0625,0.5,0.5,0.5,0.8125,0.0625,0.5,0.5,0.625,0.875,0.0625,0.5,0.5,0.75,0.9375,0.0625,0.5,0.5,0.875,1,0,0,0.5,1";
"khotkeysrc"."Data_3_9Triggers0"."Type" = "GESTURE";
"khotkeysrc"."DirSelect Dialog"."DirSelectDialog Size[$d]" = "";
"khotkeysrc"."General"."AccentColor[$d]" = "";
"khotkeysrc"."General"."AllowKDEAppsToRememberWindowPositions[$d]" = "";
"khotkeysrc"."General"."BrowserApplication[$d]" = "";
"khotkeysrc"."General"."ColorSchemeHash[$d]" = "";
"khotkeysrc"."General"."ColorScheme[$d]" = "";
"khotkeysrc"."General"."LastUsedCustomAccentColor[$d]" = "";
"khotkeysrc"."General"."XftAntialias[$d]" = "";
"khotkeysrc"."General"."XftHintStyle[$d]" = "";
"khotkeysrc"."General"."XftSubPixel[$d]" = "";
"khotkeysrc"."General"."accentColorFromWallpaper[$d]" = "";
"khotkeysrc"."Gestures"."Disabled" = true;
"khotkeysrc"."Gestures"."MouseButton" = 2;
"khotkeysrc"."Gestures"."Timeout" = 300;
"khotkeysrc"."GesturesExclude"."Comment" = "";
"khotkeysrc"."GesturesExclude"."WindowsCount" = 0;
"khotkeysrc"."Icons"."Theme[$d]" = "";
"khotkeysrc"."KDE"."LookAndFeelPackage[$d]" = "";
"khotkeysrc"."KDE"."SingleClick[$d]" = "";
"khotkeysrc"."KDE"."widgetStyle[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Allow Expansion[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Automatically select filename extension[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Breadcrumb Navigation[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Decoration position[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."LocationCombo Completionmode[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."PathCombo Completionmode[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Preview Width[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Show Bookmarks[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Show Full Path[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Show Inline Previews[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Show Preview[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Show Speedbar[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Show hidden files[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Sort by[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Sort directories first[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Sort hidden files last[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Sort reversed[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."Speedbar Width[$d]" = "";
"khotkeysrc"."KFileDialog Settings"."View Style[$d]" = "";
"khotkeysrc"."KScreen"."ScreenScaleFactors[$d]" = "";
"khotkeysrc"."KShortcutsDialog Settings"."Dialog Size[$d]" = "";
"khotkeysrc"."Main"."AlreadyImported" = "defaults,kde32b1,konqueror_gestures_kde321";
"khotkeysrc"."Main"."Disabled" = false;
"khotkeysrc"."PreviewSettings"."MaximumRemoteSize[$d]" = "";
"khotkeysrc"."Voice"."Shortcut" = "";
"khotkeysrc"."WM"."activeBackground[$d]" = "";
"khotkeysrc"."WM"."activeBlend[$d]" = "";
"khotkeysrc"."WM"."activeForeground[$d]" = "";
"khotkeysrc"."WM"."inactiveBackground[$d]" = "";
"khotkeysrc"."WM"."inactiveBlend[$d]" = "";
"khotkeysrc"."WM"."inactiveForeground[$d]" = "";
"kiorc"."Confirmations"."ConfirmDelete" = true;
"kiorc"."Confirmations"."ConfirmEmptyTrash" = true;
"kiorc"."Confirmations"."ConfirmTrash" = false;
"kiorc"."Executable scripts"."behaviourOnLaunch" = "alwaysAsk";
"klipperrc"."General"."IgnoreImages" = false;
"klipperrc"."General"."MaxClipItems" = 100;
"kmixrc"."Global"."AllowDocking" = false;
"kmixrc"."Global"."AutoStart" = false;
"kmixrc"."Global"."ConfigVersion" = 3;
"kmixrc"."Global"."MasterMixer" = "PulseAudio::Playback_Devices:1";
"kmixrc"."Global"."MasterMixerDevice" = "auto_null";
"kmixrc"."Global"."MixerIgnoreExpression" = "Modem";
"kmixrc"."Global"."Size" = "0,0";
"kmixrc"."Global"."Visible" = false;
"kmixrc"."Profiles"."PulseAudio::Capture_Devices:1" = "PulseAudio..1.default";
"kmixrc"."Profiles"."PulseAudio::Capture_Streams:1" = "PulseAudio..1.default";
"kmixrc"."Profiles"."PulseAudio::Playback_Devices:1" = "PulseAudio..1.default";
"kmixrc"."Profiles"."PulseAudio::Playback_Streams:1" = "PulseAudio..1.default";
"kmixrc"."View.PulseAudio..1.default.PulseAudio::Capture_Devices:1.alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_6__source"."Split" = false;
"kmixrc"."View.PulseAudio..1.default.PulseAudio::Capture_Devices:1.alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__source"."Split" = false;
"kmixrc"."View.PulseAudio..1.default.PulseAudio::Playback_Streams:1.restore:sink-input-by-media-role:event"."Split" = false;
"kmixrc"."View.PulseAudio..1.default.PulseAudio::Playback_Devices:1.alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_3__sink"."Split" = false;
"kmixrc"."View.PulseAudio..1.default.PulseAudio::Playback_Devices:1.alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_4__sink"."Split" = false;
"kmixrc"."View.PulseAudio..1.default.PulseAudio::Playback_Devices:1.alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_5__sink"."Split" = false;
"kmixrc"."View.PulseAudio..1.default.PulseAudio::Playback_Devices:1.alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink"."Split" = false;
"kmixrc"."View.PulseAudio..1.default.PulseAudio::Playback_Devices:1.auto_null"."Split" = false;
"kmixrc".""."Height 1600" = 455;
"kmixrc".""."Width 2560" = 554;
"krunnerrc"."General"."FreeFloating" = true;
"krunnerrc"."Plugins"."baloosearchEnabled" = false;
"kscreenlockerrc"."Daemon"."Autolock" = false;
"kscreenlockerrc"."Greeter.Wallpaper.org.kde.image.General"."Image" = "/home/chn/Desktop/./HlszomyrfyxKLtpkVixEtikq_x4_chop.png";
"kscreenlockerrc"."Greeter.Wallpaper.org.kde.image.General"."PreviewImage" = "/home/chn/Desktop/./HlszomyrfyxKLtpkVixEtikq_x4_chop.png";
"ksmserverrc"."General"."loginMode" = "emptySession";
"ksmserverrc"."SubSession: 3435a388-a8b3-4d1d-9794-b8c30162ce16"."count" = 0;
"ksmserverrc"."SubSession: 6a473a77-85df-4e49-8c74-bdb06d1f0efd"."count" = 0;
"kwalletrc"."Wallet"."First Use" = false;
"kwinrc"."Compositing"."AllowTearing" = false;
"kwinrc"."Desktops"."Id_1" = "59c97a39-ae86-42a2-a6a2-e355b275189a";
"kwinrc"."Desktops"."Id_2" = "46153339-1363-403c-9622-35430b0557e5";
"kwinrc"."Desktops"."Id_3" = "d1990814-e34a-4d65-b29d-9869aa390130";
"kwinrc"."Desktops"."Id_4" = "55b646ba-2f52-4af6-84ad-6e83b93c0669";
"kwinrc"."Desktops"."Number" = 4;
"kwinrc"."Desktops"."Rows" = 2;
"kwinrc"."Effect-blur"."BlurStrength" = 10;
"kwinrc"."Effect-kwin4_effect_translucency"."MoveResize" = 75;
"kwinrc"."Effect-wobblywindows"."AdvancedMode" = true;
"kwinrc"."Effect-wobblywindows"."Drag" = 85;
"kwinrc"."Effect-wobblywindows"."Stiffness" = 10;
"kwinrc"."Effect-wobblywindows"."WobblynessLevel" = 1;
"kwinrc"."Plugins"."blurEnabled" = true;
"kwinrc"."Plugins"."contrastEnabled" = false;
"kwinrc"."Plugins"."kwin4_effect_dimscreenEnabled" = true;
"kwinrc"."Plugins"."kwin4_effect_translucencyEnabled" = true;
"kwinrc"."Plugins"."padding" = 4;
"kwinrc"."Plugins"."wobblywindowsEnabled" = true;
"kwinrc"."SubSession: 3435a388-a8b3-4d1d-9794-b8c30162ce16"."active" = "-1";
"kwinrc"."SubSession: 3435a388-a8b3-4d1d-9794-b8c30162ce16"."count" = 0;
"kwinrc"."SubSession: 6a473a77-85df-4e49-8c74-bdb06d1f0efd"."active" = "-1";
"kwinrc"."SubSession: 6a473a77-85df-4e49-8c74-bdb06d1f0efd"."count" = 0;
"kwinrc"."Tiling"."padding" = 4;
"kwinrc"."Tiling.0d3998b5-12fb-5e5d-9844-298a9a2f96a3"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.213a9620-187e-58a6-b80b-85d8fb95dfce"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.285712a6-31d1-5e3a-95e8-b6f4629caf9f"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.2aa85c1b-f9f4-51c2-831e-dbbd6aea2576"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.3e6a13d3-7d29-5922-82c3-84e8bdf10429"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.40fb0ae6-4d25-5480-b243-0f4924570b92"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.41dbdd7d-3355-5b44-a3d8-6b9d76bd8f49"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.4c85f5bb-4dcb-5bec-8433-5c0e6860d679"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.5b7a5ba4-43cc-5910-8e98-f358f9d54b43"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.68ef4fec-9971-5899-9f5a-9bafaac6d016"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.7b033d70-7be4-564a-8cb5-131fc76f4517"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.8abeadb8-e20c-502f-a422-649967e677bd"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.930227d2-176d-55ae-b42d-99afaeafa61d"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.94554398-f51f-5d08-8909-838a65d2021f"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.9ce2bb81-955c-5eca-bf8f-a2b96c1bd574"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.9fff9751-4241-5809-b520-d1e4f7ee6716"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.a0d5ed6f-d993-5652-af90-8090aaea58f1"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.af1f9f4e-7675-5e65-b3ad-cab439cd3ed4"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.b08bfea5-80c9-53b4-a9ac-29c5c722ee85"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.b31b477c-d7e2-5305-b59d-f5c58bb123c5"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.c9dcef5c-605f-5b87-bbbf-1a493981abea"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.ed4b5b12-e8f0-5571-a0dd-1bf2e3d208f2"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Tiling.fe059470-320a-5189-aef7-d3a016f73584"."tiles" = "{\"layoutDirection\":\"horizontal\",\"tiles\":[{\"width\":0.25},{\"width\":0.5},{\"width\":0.25}]}";
"kwinrc"."Wayland"."InputMethod[$e]" = "/run/current-system/sw/share/applications/org.fcitx.Fcitx5.desktop";
"kwinrc"."Windows"."RollOverDesktops" = true;
"kwinrc"."Xwayland"."Scale" = 1;
"kwinrc"."Xwayland"."XwaylandEavesdrops" = "Combinations";
"kwinrc"."org.kde.kdecoration2"."ButtonsOnLeft" = "M";
"kwinrc"."org.kde.kdecoration2"."ButtonsOnRight" = "BFIAX";
"kwinrulesrc"."06734e18-08f2-47f9-a6dc-9085d95fe9b0"."Description" = "org.kde.kruler ";
"kwinrulesrc"."06734e18-08f2-47f9-a6dc-9085d95fe9b0"."above" = true;
"kwinrulesrc"."06734e18-08f2-47f9-a6dc-9085d95fe9b0"."aboverule" = 2;
"kwinrulesrc"."06734e18-08f2-47f9-a6dc-9085d95fe9b0"."skipswitcher" = true;
"kwinrulesrc"."06734e18-08f2-47f9-a6dc-9085d95fe9b0"."skipswitcherrule" = 2;
"kwinrulesrc"."06734e18-08f2-47f9-a6dc-9085d95fe9b0"."wmclass" = "org.kde.kruler";
"kwinrulesrc"."06734e18-08f2-47f9-a6dc-9085d95fe9b0"."wmclassmatch" = 1;
"kwinrulesrc"."1"."Description" = "element ";
"kwinrulesrc"."1"."activity" = "00000000-0000-0000-0000-000000000000";
"kwinrulesrc"."1"."activityrule" = 2;
"kwinrulesrc"."1"."wmclass" = "element";
"kwinrulesrc"."1"."wmclassmatch" = 1;
"kwinrulesrc"."2"."Description" = "org.telegram.desktop ";
"kwinrulesrc"."2"."activity" = "00000000-0000-0000-0000-000000000000";
"kwinrulesrc"."2"."activityrule" = 2;
"kwinrulesrc"."2"."wmclass" = "org.telegram.desktop";
"kwinrulesrc"."2"."wmclassmatch" = 1;
"kwinrulesrc"."3"."Description" = "org.kde.kruler ";
"kwinrulesrc"."3"."above" = true;
"kwinrulesrc"."3"."aboverule" = 2;
"kwinrulesrc"."3"."skipswitcher" = true;
"kwinrulesrc"."3"."skipswitcherrule" = 2;
"kwinrulesrc"."3"."wmclass" = "org.kde.kruler";
"kwinrulesrc"."3"."wmclassmatch" = 1;
"kwinrulesrc"."8c1ccf0b-abf4-4d24-a848-522a76a2440d"."Description" = "element ";
"kwinrulesrc"."8c1ccf0b-abf4-4d24-a848-522a76a2440d"."activity" = "00000000-0000-0000-0000-000000000000";
"kwinrulesrc"."8c1ccf0b-abf4-4d24-a848-522a76a2440d"."activityrule" = 2;
"kwinrulesrc"."8c1ccf0b-abf4-4d24-a848-522a76a2440d"."wmclass" = "element";
"kwinrulesrc"."8c1ccf0b-abf4-4d24-a848-522a76a2440d"."wmclassmatch" = 1;
"kwinrulesrc"."General"."count" = 3;
"kwinrulesrc"."General"."rules" = "1,2,3";
"kwinrulesrc"."e75e010c-c094-4e6c-a98e-fe011e563466"."Description" = "org.telegram.desktop ";
"kwinrulesrc"."e75e010c-c094-4e6c-a98e-fe011e563466"."activity" = "00000000-0000-0000-0000-000000000000";
"kwinrulesrc"."e75e010c-c094-4e6c-a98e-fe011e563466"."activityrule" = 2;
"kwinrulesrc"."e75e010c-c094-4e6c-a98e-fe011e563466"."wmclass" = "org.telegram.desktop";
"kwinrulesrc"."e75e010c-c094-4e6c-a98e-fe011e563466"."wmclassmatch" = 1;
"kxkbrc"."Layout"."DisplayNames" = "";
"kxkbrc"."Layout"."LayoutList" = "us";
"kxkbrc"."Layout"."Use" = true;
"kxkbrc"."Layout"."VariantList" = "";
"plasma-localerc"."Formats"."LANG" = "en_US.UTF-8";
"plasma-localerc"."Translations"."LANGUAGE" = "zh_CN";
"plasmanotifyrc"."Notifications"."PopupPosition" = "BottomRight";
"plasmarc"."Wallpapers"."usersWallpapers" = "/home/chn/Desktop/./twin_96734339_x2.png,/home/chn/Desktop/./E_yCTfDUUAgykjX_x8.jpeg,/home/chn/Desktop/./102692178_p0_[L1][x2.00].png,/home/chn/Desktop/./111392869_p0.png,/home/chn/Desktop/./HlszomyrfyxKLtpkVixEtikq_x4_chop.png";
"systemsettingsrc"."KFileDialog Settings"."detailViewIconSize" = 16;
};
};
}

View File

@@ -0,0 +1,63 @@
inputs:
{
config = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
{
home-manager.users.chn.config.home.file =
let
programs =
{
nheko =
let
drv = inputs.pkgs.writeTextDir "nheko.desktop" (builtins.replaceStrings
[ "Exec=nheko %u" ] [ "Exec=bash -c 'sleep 5 && nheko'" ]
(builtins.readFile "${inputs.pkgs.nheko}/share/applications/nheko.desktop"));
in "${drv}/nheko.desktop";
kclockd = "${inputs.pkgs.plasma5Packages.kdeGear.kclock}/etc/xdg/autostart/org.kde.kclockd-autostart.desktop";
yakuake = "${inputs.pkgs.yakuake}/share/applications/org.kde.yakuake.desktop";
telegram =
let
drv = inputs.pkgs.writeTextDir "org.telegram.desktop.desktop" (builtins.replaceStrings
[ "Exec=telegram-desktop -- %u" ] [ "Exec=bash -c 'sleep 5 && telegram-desktop -autostart'" ]
(builtins.readFile "${inputs.pkgs.telegram-desktop}/share/applications/org.telegram.desktop.desktop"));
in "${drv}/org.telegram.desktop.desktop";
element =
let
drv = inputs.pkgs.writeTextDir "element-desktop.desktop" (builtins.replaceStrings
[ "Exec=element-desktop %u" ] [ "Exec=element-desktop --hidden" ]
(builtins.readFile
"${inputs.pkgs.element-desktop.desktopItem}/share/applications/element-desktop.desktop"));
in "${drv}/element-desktop.desktop";
# kmail =
# let
# drv = inputs.pkgs.writeTextDir "org.kde.kmail2.desktop" (builtins.replaceStrings
# [ "Exec=kmail -qwindowtitle %c %u" ] [ "Exec=bash -c 'sleep 5 && kmail -qwindowtitle'" ]
# (builtins.readFile "${inputs.pkgs.kmail}/share/applications/org.kde.kmail2.desktop"));
# in "${drv}/org.kde.kmail2.desktop";
kmail = "${inputs.pkgs.kmail}/share/applications/org.kde.kmail2.desktop";
discord =
let
drv = inputs.pkgs.writeTextDir "discord.desktop" (builtins.replaceStrings
[ "Exec=Discord" ] [ "Exec=Discord --start-minimized" ]
(builtins.readFile "${inputs.pkgs.discord.desktopItem}/share/applications/discord.desktop"));
in "${drv}/discord.desktop";
};
devices =
{
pc = [ "nheko" "kclockd" "yakuake" "telegram" "element" "kmail" "discord" ];
surface = [ "kclockd" "yakuake" "telegram" "element" ];
};
in builtins.listToAttrs (builtins.map
(file:
{
name = ".config/autostart/${builtins.baseNameOf (builtins.unsafeDiscardStringContext programs.${file})}";
value.source = programs.${file};
})
(devices.${inputs.config.nixos.system.networking.hostname} or []));
environment.persistence =
let impermanence = inputs.config.nixos.system.impermanence;
in inputs.lib.mkIf impermanence.enable
{
"${impermanence.root}".users.chn.directories = [ ".config/autostart" ];
};
};
}

View File

@@ -0,0 +1,17 @@
[Desktop Entry]
Name=Telegram Desktop
Comment=Official desktop version of Telegram messaging app
TryExec=telegram-desktop
Exec=bash -c "sleep 5 && telegram-desktop -autostart"
Icon=telegram
Terminal=false
StartupWMClass=TelegramDesktop
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
MimeType=x-scheme-handler/tg;
Keywords=tg;chat;im;messaging;messenger;sms;tdesktop;
Actions=quit;
DBusActivatable=true
SingleMainWindow=true
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true

View File

@@ -0,0 +1,94 @@
inputs:
{
imports = inputs.localLib.mkModules [ ./autostart ./wallpaper ./konsole.nix ./shortcuts.nix ./theme.nix ];
config = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
{
home-manager.users.chn.config.programs.plasma = inputs.lib.mkMerge
[
# TODO: autostart, panel, discard user changed settings
# general
{
enable = true;
configFile.plasma-localerc = { Formats.LANG = "en_US.UTF-8"; Translations.LANGUAGE = "zh_CN"; };
}
# kwin
{
kwin.titlebarButtons.right = [ "help" "keep-below-windows" "keep-above-windows" "minimize" "maximize" "close" ];
windows.allowWindowsToRememberPositions = false;
configFile =
{
plasmanotifyrc.Notifications.PopupPosition = "BottomRight";
kwinrc =
{
Tiling.padding = 4;
Wayland."InputMethod[$e]" = "/run/current-system/sw/share/applications/org.fcitx.Fcitx5.desktop";
Windows.RollOverDesktops = true;
Compositing = { AllowTearing = false; WindowsBlockCompositing = false; };
};
};
}
# baloo
{ configFile.baloofilerc."Basic Settings".Indexing-Enabled = false; }
# dolphin and file chooser
{
configFile =
{
dolphinrc =
{
General = { ShowFullPath = true; FilterBar = true; RememberOpenedTabs = false; };
PreviewSettings.Plugins = builtins.concatStringsSep ","
[
"blenderthumbnail"
"comicbookthumbnail"
"djvuthumbnail"
"ebookthumbnail"
"exrthumbnail"
"marble_thumbnail_geojson"
"marble_thumbnail_gpx"
"jpegthumbnail"
"marble_thumbnail_kmz"
"marble_thumbnail_kml"
"kraorathumbnail"
"windowsimagethumbnail"
"windowsexethumbnail"
"mltpreview"
"mobithumbnail"
"opendocumentthumbnail"
"marble_thumbnail_osm"
"palathumbcreator"
"gsthumbnail"
"rawthumbnail"
"svgthumbnail"
"imagethumbnail"
"fontthumbnail"
"directorythumbnail"
"textthumbnail"
"webarchivethumbnail"
"ffmpegthumbs"
"audiothumbnail"
];
};
kdeglobals."KFileDialog Settings" =
{
"Allow Expansion" = true;
"Automatically select filename extension" = true;
"Show Bookmarks" = true;
"Show Full Path" = true;
"Show Inline Previews" = true;
"Show Preview" = true;
"Show Speedbar" = true;
"Show hidden files" = true;
"Sort by" = "Name";
"Sort directories first" = true;
"Sort hidden files last" = true;
"View Style" = "DetailTree";
};
};
}
# krunner
{ configFile.krunnerrc = { General.FreeFloating = true; Plugins.baloosearchEnabled = false; }; }
# lock screen
{ configFile.kscreenlockerrc.Daemon.Autolock = false; }
];
};
}

View File

@@ -0,0 +1,81 @@
inputs:
{
config = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
{
home-manager.users.chn.config =
{
programs.plasma =
{
overrideConfig = true;
overrideConfigFiles = [ "konsolerc" "yakuakerc" ];
configFile =
{
yakuakerc =
{
Appearance =
{
HideSkinBorders = true;
Skin = "Slate";
Translucency = true;
};
"Desktop Entry".DefaultProfile = "plasma-manager.profile";
Dialogs.FirstRun = false;
Window =
{
KeepOpen = false;
KeepOpenAfterLastSessionCloses = true;
ShowSystrayIcon = false;
};
};
konsolerc =
{
"Desktop Entry".DefaultProfile = "plasma-manager.profile";
"MainWindow.Toolbar sessionToolbar".ToolButtonStyle = "IconOnly";
};
};
dataFile."konsole/plasma-manager.profile" =
{
Appearance =
{
AntiAliasFonts = true;
BoldIntense = true;
ColorScheme = "Breeze";
Font = "FiraCode Nerd Font Mono,10,-1,5,50,0,0,0,0,0";
UseFontLineChararacters = true;
WordModeAttr = false;
};
"Cursor Options".CursorShape = 1;
General =
{
Name = "plasma-manager";
Parent = "FALLBACK/";
TerminalCenter = true;
TerminalMargin = 1;
};
"Interaction Options" =
{
AutoCopySelectedText = true;
TrimLeadingSpacesInSelectedText = true;
TrimTrailingSpacesInSelectedText = true;
UnderlineFilesEnabled = true;
};
Scrolling =
{
HistoryMode = 2;
ReflowLines = false;
};
"Terminal Features".BlinkingCursorEnabled = true;
};
};
home.file.".local/share/konsole/Breeze.colorscheme".text = builtins.replaceStrings
[ "Opacity=1" ] [ "Opacity=0.9\nBlur=true" ]
(builtins.readFile "${inputs.pkgs.konsole}/share/konsole/Breeze.colorscheme");
};
environment.persistence =
let impermanence = inputs.config.nixos.system.impermanence;
in inputs.lib.mkIf impermanence.enable
{
"${impermanence.root}".users.chn.directories = [ ".local/share/konsole" ".local/share/yakuake" ];
};
};
}

View File

@@ -0,0 +1,102 @@
inputs:
{
config = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
{
home-manager.users.chn.config.programs.plasma =
{
spectacle.shortcuts.captureRectangularRegion = "Print";
shortcuts = inputs.lib.mkMerge
[
# firefox
{ "firefox.desktop"._launch = "Meta+B"; }
# crow translate
{ "io.crow_translate.CrowTranslate.desktop".TranslateSelectedText = "Ctrl+Alt+E"; }
# display
{
kded5.display = [ "Display" "Meta+P" ];
kwin = { view_actual_size = "Meta+0"; view_zoom_in = [ "Meta++" "Meta+=" ]; view_zoom_out = "Meta+-"; };
org_kde_powerdevil =
{
"Decrease Screen Brightness" = "Monitor Brightness Down";
"Increase Screen Brightness" = "Monitor Brightness Up";
};
}
# volume
{
kmix =
{
decrease_volume = "Volume Down";
increase_volume = "Volume Up";
mic_mute = [ "Meta+Volume Mute" ];
mute = "Volume Mute";
};
}
# session
{
ksmserver = { "Lock Session" = [ "Meta+L" "Screensaver" ]; "Log Out" = "Ctrl+Alt+Del"; };
org_kde_powerdevil."Turn Off Screen" = "Meta+Ctrl+L";
}
# window
{
kwin =
{
ExposeAll = "Meta+Tab";
"Show Desktop" = "Meta+D";
"Suspend Compositing" = "Alt+Shift+F12";
"Walk Through Windows" = "Alt+Tab";
"Walk Through Windows (Reverse)" = "Alt+Shift+Backtab";
"Window Above Other Windows" = "Meta+Shift+PgUp";
"Window Below Other Windows" = "Meta+Shift+PgDown";
"Window Close" = "Alt+F4";
"Window Maximize" = "Meta+PgUp";
"Window Minimize" = "Meta+PgDown";
"Window Operations Menu" = "Alt+F3";
"Window Quick Tile Bottom" = "Meta+Down";
"Window Quick Tile Left" = "Meta+Left";
"Window Quick Tile Right" = "Meta+Right";
"Window Quick Tile Top" = "Meta+Up";
};
}
# virtual desktop
{
kwin =
{
"Switch One Desktop Down" = "Meta+Ctrl+Down";
"Switch One Desktop Up" = "Meta+Ctrl+Up";
"Switch One Desktop to the Left" = "Meta+Ctrl+Left";
"Switch One Desktop to the Right" = "Meta+Ctrl+Right";
"Window One Desktop Down" = "Meta+Ctrl+Shift+Down";
"Window One Desktop Up" = "Meta+Ctrl+Shift+Up";
"Window One Desktop to the Left" = "Meta+Ctrl+Shift+Left";
"Window One Desktop to the Right" = "Meta+Ctrl+Shift+Right";
};
}
# media
{
mediacontrol =
{
nextmedia = "Media Next";
pausemedia = "Media Pause";
playpausemedia = [ "Pause" "Media Play" ];
previousmedia = "Media Previous";
stopmedia = "Media Stop";
};
}
# dolphin
{ "org.kde.dolphin.desktop"._launch = "Meta+E"; }
# konsole
{ "org.kde.konsole.desktop"._launch = "Ctrl+Alt+T"; }
# krunner
{ "org.kde.krunner.desktop"._launch = "Alt+Space"; }
# settings
{ "systemsettings.desktop"._launch = "Meta+I"; }
# yakuake
{ yakuake.toggle-window-state = "Meta+Space"; }
# virt-manager
{ "virt-manager.desktop"._launch = "Meta+V"; }
# system monitor
{ "org.kde.plasma-systemmonitor.desktop"._launch = "Meta+Esc"; }
];
};
};
}

View File

@@ -0,0 +1,36 @@
inputs:
{
config = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
{
home-manager.users.chn.config.programs.plasma =
{
workspace =
{
theme = "Fluent-round-light";
colorScheme = "FluentLight";
cursorTheme = "Breeze_Snow";
lookAndFeel = "com.github.vinceliuice.Fluent-round-light";
iconTheme = "Tela-circle";
};
configFile =
{
kdeglobals.KDE.widgetStyle = "kvantum";
"Kvantum/kvantum.kvconfig".General.theme = "Fluent-round";
kwinrc =
{
Effect-blur.BlurStrength = 10;
Effect-kwin4_effect_translucency.MoveResize = 75;
Effect-wobblywindows = { AdvancedMode = true; Drag = 85; Stiffness = 10; WobblynessLevel = 1; };
Plugins =
{
blurEnabled = true;
kwin4_effect_dimscreenEnabled = true;
kwin4_effect_translucencyEnabled = true;
padding = 4;
wobblywindowsEnabled = true;
};
};
};
};
};
}

View File

@@ -0,0 +1,13 @@
inputs:
{
config.home-manager.users.chn.config.programs.plasma.configFile =
let wallpaper = "${./pixiv-96734339-x2.png}"; in
{
"plasma-org.kde.plasma.desktop-appletsrc" =
{
"Containments.1".wallpaperplugin = "a2n.blur";
"Containments.1.Wallpaper.a2n\\.blur.General".Image = wallpaper;
};
kscreenlockerrc."Greeter.Wallpaper.org\\.kde\\.image.General" = { Image = wallpaper; PreviewImage = wallpaper; };
};
}

Binary file not shown.

View File

@@ -2,6 +2,13 @@ inputs:
{
options.nixos.virtualization = let inherit (inputs.lib) mkOption types; in
{
# /var/lib/waydroid/waydroid_base.prop
# default:
# ro.hardware.gralloc=gbm
# ro.hardware.egl=mesa
# nvidia:
# ro.hardware.gralloc=default
# ro.hardware.egl=swiftshader
waydroid.enable = mkOption { default = false; type = types.bool; };
docker.enable = mkOption { default = false; type = types.bool; };
kvmHost =
@@ -30,7 +37,7 @@ inputs:
setSocketVariable = true;
daemon.settings = { features.buildkit = true; dns = [ "1.1.1.1" ]; storage-driver = "overlay2"; };
};
enableNvidia = builtins.elem "nvidia" inputs.config.nixos.hardware.gpus;
enableNvidia = inputs.lib.strings.hasInfix "nvidia" inputs.config.nixos.hardware.gpu.type;
storageDriver = "overlay2";
};
nixos.services.firewall.trustedInterfaces = [ "docker0" ];

View File

@@ -0,0 +1,31 @@
xray-client:
uuid: ENC[AES256_GCM,data:WEBAH3PQM5ahNpH/kvTtcjcJ2GllmmRlBR2oclG6AimGenSg,iv:TMp0WTOe9fuELSZoVGenl5XSZUFoiYUBEMWMn4NFv1g=,tag:GJTE0EELcZkrnGAKLYer1g==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age19ax6vm3pv8rph5tq3mmehd9sy9jk823tw8svsd790r0lkslycquqvlwz9m
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzV1pvWkVGSFg5TVAvRlhu
TnFnMEszcDRWWHlQanAyRkRpQWdqQkdhTzFvCjBqUG4xNFBiRnlSeTNQSmdkVkdD
UlVCQjRFVExuZHdrSnViajZGZ3c2dWsKLS0tIHlQYU5VeGpEQzllMmxLSnJZZzZx
N1R3Mkhxa0dOVlJiU0V2OEZVVzZVMFkKae3c1axl22uxh9wMygAHs6q1WA5ImOS8
uzKSthWSqtC7DMqgUFaaSjBYM2TN3l402syx71xVFyyAmCcGZbbJcg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1ck5vzs0xqx0jplmuksrkh45xwmkm2t05m2wyq5k2w2mnkmn79fxs6tvl3l
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCSHJVRGIwQUFpVER5SWxq
YjJOT0lXN3dFOFpjMFlWV3JCbmZFN0hnNEJBClpQUEczK2RWTGlVTmJRbVZaUC8y
bEFrL1RjTTNlYVNnRVRBZlRjaTlnUEEKLS0tIE5GM01pTGFFcWVVSWEvUHE3Z08r
a2xybTRFUFZZN20zajZJTVNwVEpGcEEKglmFMk7z1q5IlZ+lZf9M0HtknmvcYt/P
2/z5e8wLN1Hy0Zsbv0yIL/NmqwxAOGJOdzz7ElJszk/Y4kUr9aRasg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-01-17T08:21:40Z"
mac: ENC[AES256_GCM,data:8+nUsgM47gMZmCQwPgqzM95UuYgF3UStE+XiOPPaed/VIk9e2fNLu9vR+wEgb04pR29BQTWV0qx7xqF/IzFbMYLfujgfDQoOf5pTFi5E6WTFp/MDlq8DSwxJqegEvshoAcRMt2Ur8VKbEZ/ya+yZipEZBPyGHkvi0kS8AOULbb8=,iv:txSZzGGtMVMwi1ogcAJdNqm0bb8so0RVJvkbu0QMHT4=,tag:6TQ7LYfoOrCTPMBAPQqwyg==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1

View File

@@ -10,8 +10,7 @@ xray-server:
user1: ENC[AES256_GCM,data:S3IHO9FcVHTJOsRxjSohM9MgnrEwLdDpFU+efLkQaXT2jNJG,iv:KOesvPzjDfm1EDLFiegbk0wgjp7di5mUwUuuY2hwvOQ=,tag:ZsYyUyyEhO5S3weCw/gPMw==,type:str]
#ENC[AES256_GCM,data:OQOPobpbbhajgA==,iv:4jG3bHKzWcR+JnvSlJsc0Qlv5kywqVN5UE96J31CP7Q=,tag:P+jJkRxPu99tLXyO5k6dRA==,type:comment]
user2: ENC[AES256_GCM,data:e7ITe2ZouKr8dXT7SYATyzbzHaVeu6AKt1OcQKk3U0nsQgoa,iv:UbOOuojy6OAFEH8lGhKe5Hs+2K6FX5MZ8Br9AB007gs=,tag:5XeB4YngzTcHZvCpXe/ZXA==,type:str]
#ENC[AES256_GCM,data:vEit6GESM5G+Xw==,iv:A7uisdmzB2qiPeYkut6k8D3xxpVIBy/JE9cctC/cDQQ=,tag:ZY7Ttu5AUqjIxB4BIHEucQ==,type:comment]
user3: ENC[AES256_GCM,data:Q3GlAiELNXurVN3nv5k8Zt1/zqctYb3gvHZ4KnXApCRdShHT,iv:ihJ76k4NcwitdYCS0y4/UlH4K63vwmAY63bCWSi9dkk=,tag:XaH97gpAdaFkUiUTb50aLw==,type:str]
user3: ENC[AES256_GCM,data:r+6jXaIj4HJoYLnJcnjJB+WEZlGaoSy/ktc1Aw77hFtNrrGp,iv:P+YUKns1yaOZokH5WkDB0jssGyHg3ncc54tF1PyA7Oc=,tag:/pxMEr7l4ye5EDAOsllxJA==,type:str]
#ENC[AES256_GCM,data:4gqZh391hg==,iv:No22DrD6EBs2FA4/qH8msWEjs20fc+ZpEeZep+HIv+c=,tag:aHrYNbI83POI4PRj1nd+Yw==,type:comment]
user4: ENC[AES256_GCM,data:ujiml/r4aFiKOkSJkaD/KE8rKuBtLSnpZREBH3vRJUzDT0QM,iv:a3VFlXpMLNFihvFa7gloANtHmBLg4szTL5LTm8E2kNs=,tag:W9KZ1GAVx9IBKfda7Zedng==,type:str]
#ENC[AES256_GCM,data:bnnxo/I=,iv:8jOo0P+8gk05O1vnxOiyGhaeD4wyuaaA3CCr8/DbzII=,tag:J6VSJZoko3EiWyn0ATcmqA==,type:comment]
@@ -101,8 +100,8 @@ sops:
ZXFTU3ZCaW1pTVh0RUJzdDdGdHlPYTgK2mlgcX2kEc8+2UDdBnhUm6IIuh8V6agW
ooxH9OEPXUVI/4JcDo4v8ZUhAyU1ehLH0Ef7PJCChOZe2KZmWSNbhA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2023-12-08T08:32:56Z"
mac: ENC[AES256_GCM,data:mE2I5XIv+xcbaaZmnXfxCYmb5BMGc+D4AqdmFeYDrUPLZgtaSZvJkP0pVDhJcRy7L5VooGgBaI/OFWrQMLgP0Oz2s092AwiDmCV8jLQQrXs1X+ABdHLXTLvjhnOMTk8ZV0KizWJLEuCFgZ0lS6mjVHQNDW1d2TNxAhM7JvTyOVw=,iv:BZw32WlqgQzz6j5gxS1U4l10K8C5YBZAvYotilBXPA0=,tag:oc4EqeWQK9kkPgiIHfiLjQ==,type:str]
lastmodified: "2024-01-15T11:39:07Z"
mac: ENC[AES256_GCM,data:cjP8ZDujb+RhdK5fa51if+mlx2EpfA4TTmlRbExfIDnahM8deF7qmXhOXeRIF7TrdK7HrxxOsNm2F300sbtEV0CJBsu0Wf9V3JuCuf2deEhABVSEh5f44ZCg4fLCFKCidn6GZPGjk+nEbFd+U5elcDHaqbdhdMeu3iMIf/xncac=,iv:uTv//gOvqdOKWWFvDsvdix66UiHmKzf2Dz2FuJYCfcY=,tag:qzXfKyyltjZVN8sux5mElA==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1

View File

@@ -45,12 +45,14 @@ synapse:
macaroon: ENC[AES256_GCM,data:2/8GuF/a+ocVtLN0PU17JDvXw/RoXX/CXFHPlI9THl5bY8lBm6tEawijnOKVoFLovfU=,iv:GPAr3ZjqLf9ixevsZoQgs4cPkv0VL4WJoFfQZOdThlw=,tag:HRt/igDEfUJ3K39mG7b9Fg==,type:str]
form: ENC[AES256_GCM,data:Z9cYL9ibRWmOhAYtB269n0cWZSvL4zGgc03ZRag0m8cz2j0god/Fn/w6kx3cyGK1C70=,iv:Yst6WSV63IvbMF5nnicIoBj77eSwVMnAHtHrKo2UcDk=,tag:4qf6F2rdctcCf4J9vECvYg==,type:str]
signing-key: ENC[AES256_GCM,data:BbPJiNcVTqMAL2XG3K3CIbsb8EM4r8ct/WxPK10FHRwAnqChKy3CAviYU9gewO/tNZXHvUYUAUbPww==,iv:IZB/40EE3DIxAqagdH/a4kcSmiec5l24XLCQKCQNaRo=,tag:/1t0WAPBYmYrPTx4V4wgkw==,type:str]
sliding-sync: ENC[AES256_GCM,data:POXExkTRRhXin4lD4MA61xsuzYXCT6U7QtQWtNnEb6kUWRrAvS9mqk+JTBn3onCzf2Azhi3WQOY/t+OiQFXI1w==,iv:GJfJSGb6t/q9KdVCr0dVVcD+e0yZUQzrJrtuhOlYJIE=,tag:ovd1ZXRkk7VoNo8KoYDViA==,type:str]
matrix:
coturn: ENC[AES256_GCM,data:MwZKkYMefshuk46Cne4wn9ooFH8RCDbrxp+MbLJWli9iPHuzJJzUuQNU9EDL0aNbzyYEMt/7DErw42z6KrpGww==,iv:u/SVVTgfJO2FakiYU+uLHXjA4tHU/W6ASsR3S31+pWs=,tag:VTeKNOKwm2bsiZAOVXeBOQ==,type:str]
registration: ENC[AES256_GCM,data:+pA61vTg12lYUyXjLrHSY7y/ExfTQffLlGUI4HBOSFFPTck7bu68FrCaHOIBTtEMfjU=,iv:Ex/phkBZxglG8HiRz+m7h2HNanpq2Pxwbm08vdM3xFc=,tag:mM3YEa70FnCeYIUthK4TeA==,type:str]
macaroon: ENC[AES256_GCM,data:/+RaayKiPPpVV7OWWdaSkSSRHMjb8d58lZcpvltN9cYkN1btvMViEgdLSlfqzRRlPUE=,iv:pg9GXgNsrVWKlUAiCKZ2pYXugRH6MsBIMpHKoYWYLik=,tag:/mj5Ak7XAX/FH7sNPEVALw==,type:str]
form: ENC[AES256_GCM,data:7HF7HMUH1BTJgXXP6cpUiVj0jCwGW57bx9wKTJu7PnRsNuAam/+nKX7Zfg7WD+gSBlA=,iv:SYeUsuFVgAA6U6STCtKT5c5E8Kglh3x7hy6+Op4n0W8=,tag:eICmHTwwn0KcgNhdDGnusA==,type:str]
signing-key: ENC[AES256_GCM,data:hzxxDbGp1L09O7+ueUSa5lJOY/QvF2zvHdpueEHjaPQEToQt9mr2loeTQHC7ObTegfLb9UHrI1jn4A==,iv:KngfahwYZZmDQ5LeOUPWptTMGAC8TZm1G0FWcrwCwsw=,tag:U9pW6/boBIpiswn67Ezrfw==,type:str]
sliding-sync: ENC[AES256_GCM,data:BeA6g98IWDP6hnLFI77QqG6esDwB6j3OPzAv3eJxWoTajAsByHSgSYP1vHN5Iok6IgvSSmkf0/HiOJy1Ca8IIA==,iv:ca+t/rYwc/fAVUcz0JTmrRQCOcbDNscbnE8BpHkx/OE=,tag:eEfhUChUt4kRnO82XqRY4g==,type:str]
nebula:
key: ENC[AES256_GCM,data:9o6EkfTWOU0KwnJsgHML4E7VOfzo3LHnlOkV8ubhi6aayXImC3lAaoPrqUI=,iv:KHprijN7z+4FIIW+D5klDM9a9VzMJ5xawPc7jJtbHmk=,tag:0DAmxoz8D5f38ndPbkNW+g==,type:str]
vaultwarden:
@@ -127,8 +129,8 @@ sops:
SnFHS1Z0SXUzTFdEd29KTy9DU3Y3R0UKfhh+rUmWDrf+UGjclP57dHipPLFoXSqy
HdelmfV6q4/c7ppx2E+oZw3VNgoZCsrxxzYZfwxHJiZb+5vkE0D8iA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2023-12-19T13:41:44Z"
mac: ENC[AES256_GCM,data:+tj7+Q4bTzKNRY5N8Okj2DIl4YRSAO9SC1pzJ3hkp+dBF7uNnyVK+QOyN4cxoAQorPhH2lETHu4aK9Zmi6A4YiGUBCgnvBwvXpZw+iy2hmIDBISi9Y34wmTNAx8PW6BI2E+8d5dFFXiQbULjLbV4TolYyZVbvnCVHWTYff0ht8E=,iv:gpT+s6K+ey3yUzI+ShH1dOV+S/1o1PIRiNv4K0mBqXk=,tag:lupDndxajL01QsHL51r7Nw==,type:str]
lastmodified: "2023-12-20T06:27:19Z"
mac: ENC[AES256_GCM,data:i7AN+Sd4C61GSzT409mYd6D2tQzDyONIUsto52b1mV8hIJ4Q/U9VT5wumRjm4dGUWqrq9oFdD0/iUL1CmEdasBN7VFwNEpSYl6yhzU7zX3Re3N/0mffeW0Fx/38LdvywusJAHC9yWvsNMblKDnYxGm/UI2W/7QRMDyr8jnU6La0=,iv:Ua+K1m27GkkrUn+wcylkwrdWnq1yzFG1NMVzYAiW/6k=,tag:Gqqk5zOU3Ax2Al5CvXEV7g==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1

View File

@@ -1,31 +0,0 @@
xray-client:
uuid: ENC[AES256_GCM,data:WQUDaTeOsY61st6HQKjGKuVoQIy6Gpf0dMzJeIqMUV/4sihj,iv:R6IZzIAmn7rknxD5HWGRE618pdUyEWB0F2tO9+EfunI=,tag:u+50NAK8LwzyUNt0GVyabw==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age19ax6vm3pv8rph5tq3mmehd9sy9jk823tw8svsd790r0lkslycquqvlwz9m
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaTmlZdld6eWtrZzVTR1Fs
RXhTczRsOVNrMWIyWm9ud1lzYVJUbGJnc2drCmVKTHlVNXFZUTh5bmlncHA1MmlE
UnovM0tONHBHTkY4TS9FRmRkRFkrcjgKLS0tIGxxbzV4Z09CdWkyY3d1MFBNL2dO
MGFMaGM3WW5LRXd1T2ZPTkpBdWRTR00Ktnuqblw4rS9fXb2CTzY7BjpDK6K1wx97
tV1FeuKcEXpp8AMKOdbKTOznnolI4sTnz2l0iP1m7bk6f9PGNjyQhw==
-----END AGE ENCRYPTED FILE-----
- recipient: age1qrea4twxdhd7fnvlq5v45528c90qy6hp2wa55kghsxzgut6n6fxs7w6u42
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaQkxFc1U2R2RndVRHcisv
ZGg0VXhDYnpsQVV0Q3habXRiSHhTVTVUOUZ3CkFMUTMzL3NFcHpwaklZZStIYktW
WUpwWi9xQ3MyNXl1aVREcC9KeFlsWE0KLS0tIEJVR1VFRHNBSVVaVlJsNFJtWXAv
YmphYnp4YTQyV0VrT0h4RlNSRVptbkEKao+OYKlwgLcbMe75+RcdlxmYtvgheqp2
SwEhhlV8QNWylkOU+S38C3+oiQqlPZQkwOyBMfB5eoTUM8xCLjf1og==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2023-08-20T18:23:21Z"
mac: ENC[AES256_GCM,data:Dn2yxA/8GjPpmI5oWybiv0JNiiHDbleTtYZaM7GTMStP15N4Yo1tzVqlfzy6QWdLvcyZtoodamnry9yj+A7dP1sj0Fgkiq2FnzIp+JuJXkKH7AYWKugOmzKz7Kky2SEDU2r1UoucIbW9SRbgyukXPLpGRUGqIZNLR6OZ3w0atTA=,iv:sKyg1opbnQsQs/ZteTjEyarFU/HgmSSe+Frmvwfpylk=,tag:Sc6z4SnXOxICQ+TN7C6ZVA==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.7.3