mirror of
https://github.com/CHN-beta/nixos.git
synced 2026-01-11 23:09:22 +08:00
Compare commits
261 Commits
2d1df77bc3
...
mumax
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d5a663ae0 | |||
| 82fb082006 | |||
| 50a7839407 | |||
| bc82d0956d | |||
| 8b329eabca | |||
| 5aeca3451d | |||
| 4ea44a179e | |||
| dc0ac2a333 | |||
| bee788f30d | |||
| 2649cc36df | |||
| 09e2076eee | |||
| 7fa8d58e3e | |||
| 82f41d070c | |||
| eac0a49f51 | |||
| 380532ffbc | |||
| bca4d85c7b | |||
| 864d739b68 | |||
| 2e14f31dcb | |||
| b553e1cd21 | |||
| e7c9de177c | |||
| 086cc04512 | |||
| 309812741a | |||
| a92eae2b67 | |||
| 89253105fd | |||
| fd416d5574 | |||
| 815819adb8 | |||
| 8cf5fa8635 | |||
| 38a96c5e56 | |||
| 90101eb222 | |||
| 890000b9ef | |||
| b674075d49 | |||
| d7923aafe1 | |||
| 2b20f5ab35 | |||
| aa7662ef48 | |||
| adf2141297 | |||
| a609a3d6c1 | |||
| a7d372c6a7 | |||
| 2c8dca786e | |||
| 7edb16f163 | |||
| 7458744a1f | |||
| 100f5241b1 | |||
| 29a98af8d4 | |||
| 1bc85bc6af | |||
| a904be79b8 | |||
| 522eff0fad | |||
| 3fb9a0a63c | |||
| 8928406161 | |||
| 2c750d8b90 | |||
| b370ab0a88 | |||
| 3d9a10f8b0 | |||
| 1742ff8cbd | |||
| 4c3b25afca | |||
| e5ba10751b | |||
| 834d44fbf6 | |||
| 1cd3a3ff39 | |||
| 8362b370e8 | |||
| 185c001f3f | |||
| cfc6621074 | |||
| 73445cf51b | |||
| 8ff662be17 | |||
| a3b9c2d29f | |||
| c9552c0674 | |||
| 83b8690bce | |||
| b60a0e9b70 | |||
| 88609fafe4 | |||
| 9204d9879b | |||
| f98887155e | |||
| 77d268d883 | |||
| 128b83a7c6 | |||
| 81ed72bf92 | |||
| 2aefcc5142 | |||
| 6b16d10a83 | |||
| f7ff629c55 | |||
| 61b3df7c82 | |||
| fd4e8ebdff | |||
| 8f623ff3df | |||
| 98817c89d4 | |||
| 983e9163e1 | |||
| ea64073bbf | |||
| aa33572db7 | |||
| 21e8f3ec39 | |||
| 8e2ff3d5a3 | |||
| 7125ae3be8 | |||
| 810afe1df5 | |||
| 7ebb95aac2 | |||
| b5ad8307dc | |||
| 385939522a | |||
| a3e1dce432 | |||
| e5288112e9 | |||
| 2396bdcd64 | |||
| 63e4eb7bba | |||
| c9fbc3b5bc | |||
| a90f74fb77 | |||
| 9b9493be53 | |||
| 983decc8c1 | |||
| 7d584a6563 | |||
| 7f8f65649b | |||
| 390c24aea9 | |||
| 98e75a2ab4 | |||
| 7c161d3521 | |||
| 7cb4c6ecec | |||
| aef16e54f1 | |||
| 536a96ce5e | |||
| a94d6e3d21 | |||
| 0e09b925c2 | |||
| 9d1fae10d8 | |||
| ef1caae121 | |||
| 6d70eecc19 | |||
| 1e42238723 | |||
| fe089060ae | |||
| 8a5bb908c7 | |||
| 54bfa1c8ac | |||
| 54493a2ec6 | |||
| f1218571c5 | |||
| aecc530aa9 | |||
| c43187a15c | |||
| 86a781b327 | |||
| 0424d7eed7 | |||
| 78a74a5aef | |||
| a4c04c9de2 | |||
| aad44c7edd | |||
| 2a7e8d78be | |||
| 8b90c0bc22 | |||
| 6f533e73ee | |||
| 244b0e17fa | |||
| 7f165fccf4 | |||
| 40f4d35b62 | |||
| 02981d242f | |||
| 6a36fe0539 | |||
| 45e5569d55 | |||
| a9027c6127 | |||
| 67079b0885 | |||
| 3384026e91 | |||
| 803b20ec96 | |||
| 074f88d231 | |||
| fd7fe508f5 | |||
| cf6a66f11e | |||
| c4c2e680a4 | |||
| bf16cc5593 | |||
| 5d473887a3 | |||
| 773b2e8cc1 | |||
| c9cfbb515b | |||
| 82e2cd4e7d | |||
| 794657d0ea | |||
| 4f621ce7f1 | |||
| 4ebff80941 | |||
| 6080de15ca | |||
| 2310289c92 | |||
| ef30e0f6dc | |||
| e26e287603 | |||
| f9227c3e85 | |||
| 264be067ca | |||
| 047619ee17 | |||
| fc6cbc6230 | |||
| 056f38dbf5 | |||
| 61d7db84ba | |||
| 6672ea7f4f | |||
| 4aead6cfc6 | |||
| 139722dfdf | |||
| ac85049d0f | |||
| f5f71bee21 | |||
| 08af6615af | |||
| a07800192d | |||
| 13b0c77e7a | |||
| 43e8215fc6 | |||
| abdf3f5f0b | |||
| 9b41ebd154 | |||
| 21e8b5300a | |||
| 6967ab4839 | |||
| 3a60acebb5 | |||
| 26f0b20684 | |||
| 2fe4fb2a25 | |||
| 641fd3bb97 | |||
| d37e47ff40 | |||
| 67d3cac7a1 | |||
| 3ffdf466bb | |||
| c89af3fa52 | |||
| 817613ea96 | |||
| 236ddddffc | |||
| c08fd457cb | |||
| a577616756 | |||
| 9e43844e14 | |||
| 81521bcd3b | |||
| e2674908fb | |||
| 7d43e6218d | |||
| 41552e2ea1 | |||
| 268c5bdf3a | |||
| 500d4ac79e | |||
| d0603c5977 | |||
| a5fdf1ea1d | |||
| 8774a6759a | |||
| d354b555eb | |||
| 3a96911336 | |||
| 08df40f3a3 | |||
| bffed3b584 | |||
| c29eb53ee0 | |||
| 42119af04d | |||
| 9d5772ab1f | |||
| fbc6d5bee1 | |||
| 9f9e58e54e | |||
| dc297d0d04 | |||
| b59dc1b213 | |||
| 853aaf8183 | |||
| 795acc3828 | |||
| 7cf371e78c | |||
| 39fde66754 | |||
| 7a881491bd | |||
| 8e7c615b02 | |||
| dbc6874ead | |||
| 1a2f725a8e | |||
| 0665f57988 | |||
| 15a9f0c05e | |||
| 82d834e93a | |||
| c4cccacba3 | |||
| 753709d494 | |||
| 173d83daae | |||
| cbe228c873 | |||
| eb2ab49388 | |||
| 3fd0988582 | |||
| de3b40360b | |||
| bb9a1bfb68 | |||
| 9d8442b1cf | |||
| 26150244cb | |||
| 914eea92b6 | |||
| b2532ef44d | |||
| b600c81aa7 | |||
| 01a5c290bc | |||
| 16c9fa7c3d | |||
| 9bf3faee63 | |||
| e1789991c4 | |||
| 3cbfe14cc2 | |||
| 2df6396b84 | |||
| ce44fe7856 | |||
| de292de159 | |||
| 81b6831e1b | |||
| bd445d5034 | |||
| 0ca6df2499 | |||
| 00d010a910 | |||
| 48f450bfe3 | |||
| 7e4fe4837f | |||
| 13edf20710 | |||
| 556a8d68fc | |||
| 2e9972a8cd | |||
| 30397a8443 | |||
| 1fcecbb74d | |||
| d80d009e3a | |||
| a9e0a57791 | |||
| 17430b943e | |||
| 7e8bd6f959 | |||
| a624e98514 | |||
| 67a03b5ccc | |||
| f64390d7a7 | |||
| d0158b1608 | |||
| 36da74115e | |||
| fd13dd7319 | |||
| 0e75a6f4e8 | |||
| ccc102ea00 | |||
| 4465522bc5 | |||
| 8ba5913eca | |||
| 478d760816 | |||
| 98f9bfd1e5 |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1 +1,2 @@
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.icm filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
12
.sops.yaml
12
.sops.yaml
@@ -3,9 +3,9 @@ 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
|
||||
- &xmupc1 age1hnarptkze0ujpp05dqr8uma04cxg9zqcx68qgpks5uf5l6rpk5gqhh8wxg
|
||||
creation_rules:
|
||||
- path_regex: secrets/pc/.*$
|
||||
key_groups:
|
||||
@@ -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
101
devices/nas/default.nix
Normal 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 = true;
|
||||
fontconfig.enable = true;
|
||||
samba =
|
||||
{
|
||||
enable = true;
|
||||
hostsAllowed = "192.168. 127.";
|
||||
shares = { home.path = "/home"; root.path = "/"; };
|
||||
};
|
||||
sshd.enable = 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 = 4096; threads = 4; };
|
||||
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" "gb" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
BIN
devices/pc/color/TPLCD_161B_Default.icm
LFS
Executable file
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
BIN
devices/pc/color/TPLCD_161B_Native.icm
LFS
Executable file
Binary file not shown.
BIN
devices/pc/color/TPLCD_161B_Native_HDR.icm
LFS
Executable file
BIN
devices/pc/color/TPLCD_161B_Native_HDR.icm
LFS
Executable file
Binary file not shown.
BIN
devices/pc/color/TPLCD_161B_REC709.icm
LFS
Executable file
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
BIN
devices/pc/color/TPLCD_161B_sRGB.icm
LFS
Executable file
Binary file not shown.
160
devices/pc/default.nix
Normal file
160
devices/pc/default.nix
Normal file
@@ -0,0 +1,160 @@
|
||||
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" "hibernate-progress" ];
|
||||
networking.hostname = "pc";
|
||||
sysctl.laptop-mode = 5;
|
||||
};
|
||||
hardware =
|
||||
{
|
||||
cpus = [ "amd" ];
|
||||
gpu.type = "nvidia";
|
||||
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 = 4096; threads = 4; }; };
|
||||
wireguard =
|
||||
{
|
||||
enable = true;
|
||||
peers = [ "vps6" ];
|
||||
publicKey = "l1gFSDCeBxyf/BipXNvoEvVvLqPgdil84nmr5q6+EEw=";
|
||||
wireguardIp = "192.168.83.3";
|
||||
};
|
||||
gamemode = { enable = true; drmDevice = 0; };
|
||||
slurm = { enable = true; cpu = { cores = 16; threads = 2; }; memoryMB = 94208; gpus."geforce" = 1; };
|
||||
};
|
||||
bugs = [ "xmunet" "backlight" "amdpstate" ];
|
||||
};
|
||||
virtualisation.virtualbox.host = { enable = true; enableExtensionPack = true; };
|
||||
home-manager.users.chn.config.programs.plasma.startup.autoStartScript.xcalib.text =
|
||||
"${inputs.pkgs.xcalib}/bin/xcalib -d :0 ${./color/TPLCD_161B_Default.icm}";
|
||||
powerManagement.resumeCommands =
|
||||
''
|
||||
${inputs.pkgs.kmod}/bin/modprobe -r mt7921e
|
||||
${inputs.pkgs.kmod}/bin/modprobe mt7921e
|
||||
'';
|
||||
specialisation.hybrid.configuration =
|
||||
{
|
||||
nixos =
|
||||
{
|
||||
hardware.gpu =
|
||||
{ type = inputs.lib.mkForce "amd+nvidia"; prime.busId = { amd = "8:0:0"; nvidia = "1:0:0"; }; };
|
||||
services.gamemode.drmDevice = inputs.lib.mkForce 1;
|
||||
};
|
||||
system.nixos.tags = [ "hybrid-graphic" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
76
devices/surface/default.nix
Normal file
76
devices/surface/default.nix
Normal file
@@ -0,0 +1,76 @@
|
||||
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" ];
|
||||
wireguard =
|
||||
{
|
||||
enable = true;
|
||||
peers = [ "vps6" ];
|
||||
publicKey = "j7qEeODVMH31afKUQAmKRGLuqg8Bxd0dIPbo17LHqAo=";
|
||||
wireguardIp = "192.168.83.5";
|
||||
};
|
||||
beesd = { enable = true; instances.root = { device = "/"; hashTableSizeMB = 512; }; };
|
||||
};
|
||||
bugs = [ "xmunet" ];
|
||||
};
|
||||
boot.kernelParams = [ "intel_iommu=off" ];
|
||||
environment.systemPackages = with inputs.pkgs; [ maliit-keyboard maliit-framework ];
|
||||
powerManagement.resumeCommands = ''${inputs.pkgs.systemd}/bin/systemctl restart iptsd'';
|
||||
};
|
||||
}
|
||||
84
devices/vps6/default.nix
Normal file
84
devices/vps6/default.nix
Normal file
@@ -0,0 +1,84 @@
|
||||
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 = false;
|
||||
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" "vikunja"
|
||||
]));
|
||||
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" "surface" ];
|
||||
publicKey = "AVOsYUKQQCvo3ctst3vNi8XSVWo1Wh15066aHh+KpF4=";
|
||||
wireguardIp = "192.168.83.1";
|
||||
listenIp = "74.211.99.69";
|
||||
lighthouse = true;
|
||||
};
|
||||
beesd = { enable = true; instances.root = { device = "/"; hashTableSizeMB = 64; }; };
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
79
devices/vps7/default.nix
Normal file
79
devices/vps7/default.nix
Normal file
@@ -0,0 +1,79 @@
|
||||
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";
|
||||
};
|
||||
vikunja.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
122
devices/xmupc1/README.md
Normal file
122
devices/xmupc1/README.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# slurm
|
||||
|
||||
## 基本概念
|
||||
|
||||
队列系统换成了 slurm。这是个正经的队列系统(不像之前那样是临时手搓的),可靠性应该会好很多。
|
||||
学校的 hpc 上用的是 PBS,和这个不一样,但很多概念是相通的,例如队列、节点等(当然这里只有一个队列和一个节点)。
|
||||
这里简单记录一下如何使用。更多内容,网上随便搜一下 slurm 的教程就可以找到很多介绍,也可以看官网文档。
|
||||
|
||||
先说明一下机器的硬件配置:CPU 有 16 个核,每个核 2 线程,也就是总共 32 个线程。
|
||||
slurm 限制 CPU 按照核(而不是线程)分配,
|
||||
提交任务时, `sbatch` 命令中的 `cpu` 或者 `core` (它俩是同义词)都是指核的数量而不是线程数
|
||||
(也就是说,实际运行的线程数要再乘以 2)。
|
||||
|
||||
VASP 支持两个层面的并行,一个叫 MPI,一个叫 OpenMP,实际运行的线程数是两者的乘积。
|
||||
MPI 并行的数量就是提交任务时指定的 task 的数量,
|
||||
OpenMP 并行的数量等于提交任务时指定的分配给每个 task 的 CPU 的数量再乘以 2,
|
||||
也就是最终的线程数等于指定的 CPU 数量乘以 2。
|
||||
此外还有一个限制:当使用 GPU 时,MPI 并行的数量必须等于 GPU 的数量,否则 VASP 会在开头报个警告然后只用 CPU 计算(但不会报错)。
|
||||
|
||||
## 常用命令
|
||||
|
||||
提交一个 VASP GPU 任务的例子:
|
||||
|
||||
```bash
|
||||
sbatch --gpus=1 --ntasks-per-gpu=1 --job-name="my great job" vasp-nvidia-6.4.0 mpirun vasp-std
|
||||
```
|
||||
|
||||
* `--gpus=1` 指定使用一个 GPU(排到这个任务时哪个空闲就使用哪个)。
|
||||
可以指定具体使用哪个GPU,例如 `--gpus=4090:1`。
|
||||
可以简写为 `-G`。
|
||||
* `--ntasks-per-gpu=1` 是一定要写的。
|
||||
* `--job-name=` 指定任务的名字。可以简写为 `-J`。也可以不指定。
|
||||
* 默认情况下,一个 task 会搭配分配一个 CPU 核(两个线程),一般不用修改。如果一定要修改,用 `--cpus-per-task`。
|
||||
|
||||
提交一个 VASP CPU 任务的例子:
|
||||
|
||||
```bash
|
||||
sbatch --ntasks=2 --cpus-per-task=2 --job-name="my great job" vasp-gnu-6.4.0 mpirun vasp-std
|
||||
```
|
||||
|
||||
* `--ntasks=2` 指定在 MPI 层面上并行的数量。
|
||||
可以简写为 `-n`。
|
||||
* `--cpus-per-task=2` 指定每个 task 使用的 CPU 核的数量,OpenMP 并行的数量等于这个数再乘以 2。
|
||||
|
||||
要列出已经提交(包括已经完成、取消、失败)的任务:
|
||||
|
||||
```bash
|
||||
squeue -t all -l
|
||||
```
|
||||
|
||||
取消一个任务:
|
||||
|
||||
```bash
|
||||
# 按任务的 id 取消
|
||||
scancel 114514
|
||||
# 按任务的名字取消
|
||||
scancel -n my_great_job
|
||||
# 取消一个用户的所有任务
|
||||
scancel -u chn
|
||||
```
|
||||
|
||||
要将自己已经提交的一个任务优先级提到最高(只是自己已经提交任务的最高,不影响别人的任务):
|
||||
|
||||
```bash
|
||||
scontrol top job_id
|
||||
```
|
||||
|
||||
## sbatch 的更多参数
|
||||
|
||||
```bash
|
||||
# 提交一个新任务,但是礼让后面的任务(推迟到指定时间再开始排队)
|
||||
--begin=16:00 --begin=now+1hour
|
||||
# 指定工作目录
|
||||
--chdir=/path/to/your/workdir
|
||||
# 指定备注
|
||||
--comment="my great job"
|
||||
# 指定任务的 ddl,算不完就杀掉
|
||||
--deadline=now+1hour
|
||||
# 标准错误输出写到别的文件里
|
||||
--error=error.log
|
||||
# 将一些环境变量传递给任务(=ALL是默认行为)
|
||||
--export=ALL,MY_ENV_VAR=my_value
|
||||
# 不传递现在的环境变量
|
||||
--export=NONE
|
||||
# 打开一个文件作为标准输入
|
||||
--input=
|
||||
# 发生一些事件(任务完成等)时发邮件
|
||||
--mail-type=NONE,BEGIN,END,FAIL,REQUEUE,ALL --mail-user=chn@chn.moe
|
||||
# 要求分配内存(不会真的限制内存使用,只是在分配资源时会考虑)
|
||||
--mem=20G --mem-per-cpu --mem-per-gpu
|
||||
# 输出文件是否覆盖
|
||||
--open-mode={append|truncate}
|
||||
# 指定输出文件
|
||||
-o, --output=<filename_pattern>
|
||||
# 不排队,直接跑(超额分配)
|
||||
-s, --oversubscribe
|
||||
# 包裹一个二进制程序
|
||||
--wrap=
|
||||
```
|
||||
|
||||
# ssh
|
||||
|
||||
ssh 就是 putty winscp 之类的工具使用的那个协议。
|
||||
|
||||
* 地址:office.chn.moe(如果在校外,需要厦大 VPN)
|
||||
* 端口:6007
|
||||
* 用户名:自己名字的拼音首字母
|
||||
* 可以用密码登陆,也可以用证书登陆。
|
||||
|
||||
要从本机登陆到学校 hpc 的 jykang 账户,使用下面的命令:
|
||||
|
||||
```bash
|
||||
ssh jykang
|
||||
```
|
||||
|
||||
# rdp
|
||||
|
||||
就是 windows 那个远程桌面。
|
||||
|
||||
* 地址:xmupc1.chn.moe(如果在校外,需要厦大 VPN)
|
||||
* 用户名:自己名字的拼音首字母
|
||||
* 密码和 ssh 一样。
|
||||
113
devices/xmupc1/default.nix
Normal file
113
devices/xmupc1/default.nix
Normal file
@@ -0,0 +1,113 @@
|
||||
inputs:
|
||||
{
|
||||
config =
|
||||
{
|
||||
nixos =
|
||||
{
|
||||
system =
|
||||
{
|
||||
fileSystems =
|
||||
{
|
||||
mount =
|
||||
{
|
||||
vfat."/dev/disk/by-uuid/467C-02E3" = "/boot/efi";
|
||||
btrfs =
|
||||
{
|
||||
"/dev/disk/by-uuid/2f9060bc-09b5-4348-ad0f-3a43a91d158b" = { "/nix" = "/nix"; "/nix/boot" = "/boot"; };
|
||||
"/dev/disk/by-uuid/a04a1fb0-e4ed-4c91-9846-2f9e716f6e12" =
|
||||
{
|
||||
"/nix/rootfs" = "/nix/rootfs";
|
||||
"/nix/persistent" = "/nix/persistent";
|
||||
"/nix/nodatacow" = "/nix/nodatacow";
|
||||
"/nix/rootfs/current" = "/";
|
||||
};
|
||||
};
|
||||
};
|
||||
swap = [ "/nix/swap/swap" ];
|
||||
rollingRootfs = { device = "/dev/disk/by-uuid/a04a1fb0-e4ed-4c91-9846-2f9e716f6e12"; 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; autoStart = true; };
|
||||
kernel.patches = [ "cjktty" "lantian" ];
|
||||
networking.hostname = "xmupc1";
|
||||
};
|
||||
hardware =
|
||||
{
|
||||
cpus = [ "amd" ];
|
||||
gpu.type = "nvidia";
|
||||
bluetooth.enable = true;
|
||||
joystick.enable = true;
|
||||
printer.enable = true;
|
||||
sound.enable = true;
|
||||
};
|
||||
packages.packageSet = "workstation";
|
||||
virtualization = { waydroid.enable = true; docker.enable = true; kvmHost = { enable = true; gui = true; }; };
|
||||
services =
|
||||
{
|
||||
snapper.enable = false;
|
||||
fontconfig.enable = true;
|
||||
sshd = { enable = true; passwordAuthentication = true; };
|
||||
xray.client =
|
||||
{
|
||||
enable = true;
|
||||
serverAddress = "74.211.99.69";
|
||||
serverName = "vps6.xserver.chn.moe";
|
||||
dns.extraInterfaces = [ "docker0" ];
|
||||
};
|
||||
firewall.trustedInterfaces = [ "virbr0" "waydroid0" ];
|
||||
smartd.enable = true;
|
||||
beesd =
|
||||
{
|
||||
enable = false;
|
||||
instances =
|
||||
{
|
||||
root = { device = "/"; hashTableSizeMB = 16384; threads = 4; };
|
||||
nix = { device = "/nix"; hashTableSizeMB = 512; };
|
||||
};
|
||||
};
|
||||
wireguard =
|
||||
{
|
||||
enable = true;
|
||||
peers = [ "vps6" ];
|
||||
publicKey = "JEY7D4ANfTpevjXNvGDYO6aGwtBGRXsf/iwNwjwDRQk=";
|
||||
wireguardIp = "192.168.83.6";
|
||||
};
|
||||
slurm =
|
||||
{
|
||||
enable = true;
|
||||
cpu = { cores = 16; threads = 2; };
|
||||
memoryMB = 94208;
|
||||
gpus = { "3090" = 1; "4090" = 1; };
|
||||
};
|
||||
xrdp = { enable = true; hostname = [ "xmupc1.chn.moe" ]; };
|
||||
samba =
|
||||
{
|
||||
enable = true;
|
||||
hostsAllowed = "192.168. 127.";
|
||||
shares = { home.path = "/home"; root.path = "/"; };
|
||||
};
|
||||
};
|
||||
bugs = [ "xmunet" "amdpstate" ];
|
||||
users.users = [ "chn" "xll" "zem" "yjq" "gb" ];
|
||||
};
|
||||
services.hardware.bolt.enable = true;
|
||||
};
|
||||
}
|
||||
895
flake.lock
generated
895
flake.lock
generated
File diff suppressed because it is too large
Load Diff
615
flake.nix
615
flake.nix
@@ -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 =
|
||||
{
|
||||
@@ -39,11 +41,39 @@
|
||||
};
|
||||
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"; };
|
||||
nix-fast-build = { url = "github:/Mic92/nix-fast-build"; 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; };
|
||||
lepton = { url = "github:black7375/Firefox-UI-Fix"; flake = false; };
|
||||
lmod = { url = "github:TACC/Lmod"; flake = false; };
|
||||
mumax = { url = "github:CHN-beta/mumax"; flake = false; };
|
||||
};
|
||||
|
||||
outputs = inputs:
|
||||
let
|
||||
localLib = import ./local/lib inputs.nixpkgs.lib;
|
||||
devices = builtins.attrNames (builtins.readDir ./devices);
|
||||
in
|
||||
{
|
||||
packages.x86_64-linux =
|
||||
@@ -51,7 +81,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" "surface" ]));
|
||||
devices));
|
||||
}
|
||||
// (
|
||||
builtins.listToAttrs (builtins.map
|
||||
@@ -60,567 +90,32 @@
|
||||
name = system;
|
||||
value = inputs.self.outputs.nixosConfigurations.${system}.config.system.build.toplevel;
|
||||
})
|
||||
[ "pc" "vps6" "vps7" "nas" "surface" "xmupc1" ])
|
||||
devices)
|
||||
);
|
||||
# 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 =
|
||||
{
|
||||
# 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"
|
||||
];
|
||||
keepOutputs = true;
|
||||
};
|
||||
nixpkgs =
|
||||
{ march = "znver4"; cuda = { enable = true; capabilities = [ "8.9" ]; forwardCompat = false; }; };
|
||||
kernel.patches = [ "cjktty" "lantian" ];
|
||||
impermanence.enable = true;
|
||||
networking.hostname = "pc";
|
||||
sysctl.laptop-mode = 5;
|
||||
};
|
||||
hardware =
|
||||
{
|
||||
cpus = [ "amd" ];
|
||||
gpus = [ "amd" "nvidia" ];
|
||||
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" ]; };
|
||||
# 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 = [ "xmunet" "suspend-hibernate-waydroid" "backlight" ];
|
||||
};
|
||||
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" "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";
|
||||
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; 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;
|
||||
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" ];
|
||||
};
|
||||
surface =
|
||||
{
|
||||
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 = "skylake";
|
||||
grub.installDevice = "efi";
|
||||
nix.substituters = [ "https://cache.nixos.org/" "https://nix-store.chn.moe" ];
|
||||
kernel.patches = [ "cjktty" ];
|
||||
impermanence.enable = true;
|
||||
networking.hostname = "surface";
|
||||
};
|
||||
hardware =
|
||||
{
|
||||
cpus = [ "intel" ];
|
||||
gpus = [ "intel" ];
|
||||
bluetooth.enable = true;
|
||||
joystick.enable = true;
|
||||
printer.enable = true;
|
||||
sound.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));
|
||||
})
|
||||
devices);
|
||||
# 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
|
||||
@@ -656,10 +151,12 @@
|
||||
inputs.self.nixosConfigurations.${node};
|
||||
};
|
||||
})
|
||||
[ "vps6" "vps7" "nas" "yoga" ]);
|
||||
[ "vps6" "vps7" "nas" "surface" "xmupc1" ]
|
||||
);
|
||||
};
|
||||
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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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 ) ];
|
||||
|
||||
|
||||
1
local/pkgs/aocc/default.nix
Normal file
1
local/pkgs/aocc/default.nix
Normal file
@@ -0,0 +1 @@
|
||||
1k9anln9hmdjflrkq4iacrmhma7gfrfj6d0b8ywxys0wfpdvy12v
|
||||
11
local/pkgs/blurred-wallpaper/default.nix
Normal file
11
local/pkgs/blurred-wallpaper/default.nix
Normal 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
|
||||
'';
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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 ];
|
||||
}
|
||||
|
||||
@@ -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 ];
|
||||
}
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,48 +1,69 @@
|
||||
{ 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 { nodejs = nodejs_21; };
|
||||
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
|
||||
# {
|
||||
# stdenv = pkgs.lmix-pkgs.intel21Stdenv;
|
||||
# intel-mpi = pkgs.lmix-pkgs.intel-oneapi-mpi_2021_9_0;
|
||||
# ifort = pkgs.lmix-pkgs.intel-oneapi-ifort_2021_9_0;
|
||||
# };
|
||||
vasp = callPackage ./vasp
|
||||
{
|
||||
openmp = llvmPackages.openmp;
|
||||
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; };
|
||||
nvhpc = callPackage ./nvhpc {};
|
||||
lmod = callPackage ./lmod { src = topInputs.lmod; };
|
||||
vasp =
|
||||
{
|
||||
source = callPackage ./vasp/source.nix {};
|
||||
gnu = callPackage ./vasp/gnu
|
||||
{
|
||||
inherit (llvmPackages) openmp;
|
||||
inherit (unstablePackages) wannier90;
|
||||
hdf5 = hdf5.override { mpiSupport = true; fortranSupport = true; };
|
||||
};
|
||||
nvidia = callPackage ./vasp/nvidia
|
||||
{
|
||||
inherit lmod;
|
||||
nvhpc = nvhpc."24.1";
|
||||
hdf5 = hdf5-nvhpc.override { nvhpc = nvhpc."24.1"; };
|
||||
inherit (unstablePackages) wannier90;
|
||||
};
|
||||
intel = callPackage ./vasp/intel
|
||||
{
|
||||
inherit lmod;
|
||||
oneapi = oneapi."2022.2";
|
||||
hdf5 = hdf5.override { mpiSupport = true; fortranSupport = true; };
|
||||
inherit (unstablePackages) wannier90;
|
||||
};
|
||||
};
|
||||
hdf5-nvhpc = callPackage ./hdf5-nvhpc { inherit lmod; inherit (hdf5) src; nvhpc = nvhpc."24.1"; };
|
||||
oneapi = callPackage ./oneapi {};
|
||||
mumax = callPackage ./mumax { src = topInputs.mumax; };
|
||||
}
|
||||
|
||||
@@ -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 ];
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
22
local/pkgs/fluent-kde/default.nix
Normal file
22
local/pkgs/fluent-kde/default.nix
Normal 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
|
||||
'';
|
||||
}
|
||||
40
local/pkgs/hdf5-nvhpc/default.nix
Normal file
40
local/pkgs/hdf5-nvhpc/default.nix
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
buildFHSEnv, writeScript, stdenvNoCC,
|
||||
src,
|
||||
nvhpc, lmod, cmake, gfortran,
|
||||
config, nvhpcArch ? config.nvhpcArch or "px"
|
||||
}:
|
||||
let
|
||||
buildEnv = buildFHSEnv
|
||||
{
|
||||
name = "buildEnv";
|
||||
targetPkgs = pkgs: with pkgs; [ zlib ];
|
||||
extraBwrapArgs = [ "--bind" "$out" "$out" ];
|
||||
};
|
||||
buildScript = writeScript "build"
|
||||
''
|
||||
. ${lmod}/share/lmod/lmod/init/bash
|
||||
module use ${nvhpc}/share/nvhpc/modulefiles
|
||||
module load nvhpc
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX=$out -DHDF5_INSTALL_CMAKE_DIR=$out/lib/cmake \
|
||||
-DHDF5_BUILD_FORTRAN=ON -DHDF5_ENABLE_PARALLEL=ON -DBUILD_SHARED_LIBS=ON ..
|
||||
make -j$NIX_BUILD_CORES
|
||||
make install
|
||||
'';
|
||||
in stdenvNoCC.mkDerivation
|
||||
{
|
||||
name = "hdf5-nvhpc";
|
||||
inherit src;
|
||||
dontConfigure = true;
|
||||
enableParallelBuilding = true;
|
||||
nativeBuildInputs = [ cmake gfortran ];
|
||||
buildPhase =
|
||||
''
|
||||
mkdir -p $out
|
||||
${buildEnv}/bin/buildEnv ${buildScript}
|
||||
'';
|
||||
dontInstall = true;
|
||||
requiredSystemFeatures = [ "nvhpcarch-${nvhpcArch}" ];
|
||||
}
|
||||
14
local/pkgs/lmod/default.nix
Normal file
14
local/pkgs/lmod/default.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
stdenv, src,
|
||||
tcl,
|
||||
procps, bc, lua
|
||||
}:
|
||||
stdenv.mkDerivation
|
||||
{
|
||||
name = "lmod";
|
||||
inherit src;
|
||||
buildInputs = [ tcl ];
|
||||
nativeBuildInputs = [ procps bc (lua.withPackages (ps: with ps; [ luaposix ])) ];
|
||||
configurePhase = ''./configure --prefix=$out/share'';
|
||||
postUnpack = "patchShebangs .";
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
src = requireFile
|
||||
{
|
||||
inherit name;
|
||||
sha256 = "1q3f4q4ln9dz68dfc35jybgv861f7acqiiykkm7jxviz8jdgn8c7";
|
||||
sha256 = "0f50pvdafhlmrlbf341mkp9q50v4ld5pbx92d2w1633f18zghbzf";
|
||||
hashMode = "recursive";
|
||||
message = "Source file not found.";
|
||||
};
|
||||
|
||||
@@ -1,22 +1,14 @@
|
||||
{
|
||||
lib, stdenv, mkPnpmPackage, fetchFromGitHub, fetchurl, nodejs, 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.12.2";
|
||||
src = fetchFromGitHub
|
||||
{
|
||||
owner = "CHN-beta";
|
||||
repo = "misskey";
|
||||
rev = "cd1d0ab06eb6b7e06afdfae9a12b2d2829564229";
|
||||
hash = "sha256-sKEZ1ZpyA/02CNwiOMIOS5f/csx6ELDwCVJYc+oMChM=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
name = "misskey";
|
||||
originalPnpmPackage = mkPnpmPackage
|
||||
{
|
||||
inherit pname version src nodejs;
|
||||
inherit name src nodejs;
|
||||
copyPnpmStore = true;
|
||||
extraIntegritySha256."https://github.com/aiscript-dev/aiscript-languageserver/releases/download/0.1.5/aiscript-dev-aiscript-languageserver-0.1.5.tgz" = "1mhnwa8h48bc21f0zv8q93aphiqz9i70r7m4xsa4sd1mlncfgyl7";
|
||||
};
|
||||
startScript = writeShellScript "misskey"
|
||||
''
|
||||
@@ -28,7 +20,7 @@ let
|
||||
in
|
||||
stdenv.mkDerivation rec
|
||||
{
|
||||
inherit version src pname;
|
||||
inherit src name;
|
||||
buildInputs =
|
||||
[
|
||||
bash nodejs nodejs.pkgs.typescript nodejs.pkgs.pnpm nodejs.pkgs.gulp cypress vips pkg-config
|
||||
@@ -40,6 +32,7 @@ in
|
||||
''
|
||||
export HOME=$NIX_BUILD_TOP # Some packages need a writable HOME
|
||||
export npm_config_nodedir=${nodejs}
|
||||
pnpm config set reporter append-only
|
||||
|
||||
runHook preConfigure
|
||||
|
||||
|
||||
22
local/pkgs/mumax/default.nix
Normal file
22
local/pkgs/mumax/default.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{ buildGoModule, cudatoolkit, src, config, cudaCapabilities ? config.cudaCapabilities, gcc, makeWrapper }:
|
||||
# TODO: use addDriverRunpath
|
||||
buildGoModule
|
||||
{
|
||||
name = "mumax";
|
||||
inherit src;
|
||||
vendorHash = null;
|
||||
nativeBuildInputs = [ cudatoolkit gcc makeWrapper ];
|
||||
CUDA_CC = builtins.concatStringsSep " " cudaCapabilities;
|
||||
CPATH = "${cudatoolkit}/include";
|
||||
LIBRARY_PATH = "${cudatoolkit}/lib/stubs";
|
||||
doCheck = false;
|
||||
postInstall =
|
||||
''
|
||||
rm $out/bin/{doc,test}
|
||||
for i in $out/bin/*; do
|
||||
if [ -f $i ]; then
|
||||
wrapProgram $i --prefix LD_LIBRARY_PATH ":" "/run/opengl-driver/lib:${cudatoolkit}/lib"
|
||||
fi
|
||||
done
|
||||
'';
|
||||
}
|
||||
@@ -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 =
|
||||
''
|
||||
|
||||
@@ -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 ];
|
||||
}
|
||||
|
||||
42
local/pkgs/nvhpc/default.nix
Normal file
42
local/pkgs/nvhpc/default.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
stdenvNoCC, fetchurl, buildFHSEnv,
|
||||
gfortran, flock
|
||||
}:
|
||||
let
|
||||
versions =
|
||||
{
|
||||
"24.1" = "1n0x1x7ywvr3623ylvrjagayn44mbvfas3c3062p7y3asmgjx697";
|
||||
"23.1" = "1xg933f4n1bw39y1x1vrjrbzpx36sbmjgvi332hfck3dbx0n982m";
|
||||
};
|
||||
releaseName = version:
|
||||
let versions = builtins.splitVersion version;
|
||||
in "nvhpc_20${builtins.elemAt versions 0}_${builtins.concatStringsSep "" versions}_Linux_x86_64_cuda_multi";
|
||||
builder = buildFHSEnv
|
||||
{
|
||||
name = "builder";
|
||||
targetPkgs = pkgs: with pkgs; [ coreutils ];
|
||||
extraBwrapArgs = [ "--bind" "$out" "$out" ];
|
||||
};
|
||||
in let buildNvhpc = version: stdenvNoCC.mkDerivation
|
||||
{
|
||||
pname = "nvhpc";
|
||||
inherit version;
|
||||
src = fetchurl
|
||||
{
|
||||
url = "https://developer.download.nvidia.com/hpc-sdk/${version}/${releaseName version}.tar.gz";
|
||||
sha256 = versions.${version};
|
||||
};
|
||||
dontFixup = true;
|
||||
dontBuild = true;
|
||||
buildInputs = [ gfortran flock ];
|
||||
installPhase =
|
||||
''
|
||||
export NVHPC_SILENT=true
|
||||
export NVHPC_INSTALL_TYPE=single
|
||||
export NVHPC_INSTALL_DIR=$out/share/nvhpc
|
||||
# $out should exist before bwrap
|
||||
mkdir -p $out
|
||||
${builder}/bin/builder ./install
|
||||
'';
|
||||
};
|
||||
in builtins.mapAttrs (version: _: buildNvhpc version) versions
|
||||
88
local/pkgs/oneapi/default.nix
Normal file
88
local/pkgs/oneapi/default.nix
Normal file
@@ -0,0 +1,88 @@
|
||||
{
|
||||
stdenvNoCC, fetchurl, buildFHSEnv,
|
||||
ncurses
|
||||
}:
|
||||
let
|
||||
versions =
|
||||
{
|
||||
"2022.2" =
|
||||
{
|
||||
basekit =
|
||||
{
|
||||
id = "18673";
|
||||
version = "2022.2.0.262";
|
||||
sha256 = "03qx6sb58mkhc7iyc8va4y1ihj6l3155dxwmqj8dfw7j2ma7r5f6";
|
||||
components =
|
||||
[
|
||||
"intel.oneapi.lin.dpcpp-ct"
|
||||
"intel.oneapi.lin.dpcpp_dbg"
|
||||
"intel.oneapi.lin.dpl"
|
||||
"intel.oneapi.lin.tbb.devel"
|
||||
"intel.oneapi.lin.ccl.devel"
|
||||
"intel.oneapi.lin.dpcpp-cpp-compiler"
|
||||
"intel.oneapi.lin.dpl"
|
||||
"intel.oneapi.lin.mkl.devel"
|
||||
];
|
||||
};
|
||||
hpckit =
|
||||
{
|
||||
id = "18679";
|
||||
version = "2022.2.0.191";
|
||||
sha256 = "0swz4w9bn58wwqjkqhjqnkcs8k8ms9nn9s8k7j5w6rzvsa6817d2";
|
||||
};
|
||||
};
|
||||
"2024.0" =
|
||||
{
|
||||
basekit =
|
||||
{
|
||||
id = "163da6e4-56eb-4948-aba3-debcec61c064";
|
||||
version = "2024.0.1.46";
|
||||
sha256 = "1sp1fgjv8xj8qxf8nv4lr1x5cxz7xl5wv4ixmfmcg0gyk28cjq1g";
|
||||
};
|
||||
hpckit =
|
||||
{
|
||||
id = "67c08c98-f311-4068-8b85-15d79c4f277a";
|
||||
version = "2024.0.1.38";
|
||||
sha256 = "06vpdz51w2v4ncgk8k6y2srlfbbdqdmb4v4bdwb67zsg9lmf8fp9";
|
||||
};
|
||||
};
|
||||
};
|
||||
builder = buildFHSEnv
|
||||
{
|
||||
name = "builder";
|
||||
targetPkgs = pkgs: with pkgs; [ coreutils zlib ];
|
||||
extraBwrapArgs = [ "--bind" "$out" "$out" ];
|
||||
runScript = "sh";
|
||||
};
|
||||
componentString = components: if components == null then "--components default" else
|
||||
" --components " + (builtins.concatStringsSep ":" components);
|
||||
in let buildOneapi = version: stdenvNoCC.mkDerivation rec
|
||||
{
|
||||
pname = "oneapi";
|
||||
inherit version;
|
||||
basekit = fetchurl
|
||||
{
|
||||
url = "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/${versions.${version}.basekit.id}/"
|
||||
+ "l_BaseKit_p_${versions.${version}.basekit.version}_offline.sh";
|
||||
sha256 = versions.${version}.basekit.sha256;
|
||||
};
|
||||
hpckit = fetchurl
|
||||
{
|
||||
url = "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/${versions.${version}.hpckit.id}/"
|
||||
+ "l_HPCKit_p_${versions.${version}.hpckit.version}_offline.sh";
|
||||
sha256 = versions.${version}.hpckit.sha256;
|
||||
};
|
||||
phases = [ "installPhase" ];
|
||||
nativeBuildInputs = [ ncurses ];
|
||||
installPhase =
|
||||
''
|
||||
mkdir -p $out
|
||||
${builder}/bin/builder ${basekit} -a --silent --eula accept --install-dir $out/share/intel \
|
||||
${componentString versions.${version}.basekit.components or null}
|
||||
${builder}/bin/builder ${hpckit} -a --silent --eula accept --install-dir $out/share/intel \
|
||||
${componentString versions.${version}.hpckit.components or null}
|
||||
${builder}/bin/builder $out/share/intel/modulefiles-setup.sh --output-dir=$out/share/intel/modulefiles \
|
||||
--ignore-latest
|
||||
'';
|
||||
};
|
||||
in builtins.mapAttrs (version: _: buildOneapi version) versions
|
||||
@@ -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
|
||||
|
||||
10
local/pkgs/slate/default.nix
Normal file
10
local/pkgs/slate/default.nix
Normal 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
|
||||
'';
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 =
|
||||
[
|
||||
22
local/pkgs/vasp/constr_cell_relax.F
Normal file
22
local/pkgs/vasp/constr_cell_relax.F
Normal file
@@ -0,0 +1,22 @@
|
||||
SUBROUTINE CONSTR_CELL_RELAX(FCELL)
|
||||
USE prec
|
||||
REAL(q) FCELL(3,3)
|
||||
|
||||
LOGICAL FILFLG
|
||||
INTEGER ICELL(3,3)
|
||||
INQUIRE(FILE='OPTCELL',EXIST=FILFLG)
|
||||
IF (FILFLG) THEN
|
||||
OPEN(67,FILE='OPTCELL',FORM='FORMATTED',STATUS='OLD')
|
||||
DO J=1,3
|
||||
READ(67,"(3I1)") (ICELL(I,J),I=1,3)
|
||||
ENDDO
|
||||
CLOSE(67)
|
||||
DO J=1,3
|
||||
DO I=1,3
|
||||
IF (ICELL(I,J)==0) FCELL(I,J)=0.0
|
||||
ENDDO
|
||||
ENDDO
|
||||
ENDIF
|
||||
|
||||
RETURN
|
||||
END SUBROUTINE
|
||||
@@ -1,77 +0,0 @@
|
||||
# {
|
||||
# stdenv, requireFile, config, rsync, intel-mpi, ifort,
|
||||
# mkl
|
||||
# }:
|
||||
# stdenv.mkDerivation rec
|
||||
# {
|
||||
# pname = "vasp";
|
||||
# version = "6.4.0";
|
||||
# # nix-store --query --hash $(nix store add-path ./vasp-6.4.0)
|
||||
# src = requireFile
|
||||
# {
|
||||
# name = "${pname}-${version}";
|
||||
# sha256 = "189i1l5q33ynmps93p2mwqf5fx7p4l50sls1krqlv8ls14s3m71f";
|
||||
# hashMode = "recursive";
|
||||
# message = "Source file not found.";
|
||||
# };
|
||||
# VASP_TARGET_CPU = if config ? oneapiArch then "-x${config.oneapiArch}" else "";
|
||||
# MKLROOT = mkl;
|
||||
# makeFlags = "DEPS=1";
|
||||
# enableParallelBuilding = true;
|
||||
# buildInputs = [ mkl intel-mpi ifort ];
|
||||
# nativeBuildInputs = [ rsync ];
|
||||
# configurePhase =
|
||||
# ''
|
||||
# cp arch/makefile.include.intel makefile.include
|
||||
# echo "CPP_OPTIONS += -Duse_shmem -Dshmem_bcast_buffer -Dshmem_rproj" >> makefile.include
|
||||
# echo "OBJECTS_LIB += getshmem.o" >> makefile.include
|
||||
# mkdir -p bin
|
||||
# '';
|
||||
# installPhase =
|
||||
# ''
|
||||
# mkdir -p $out/bin
|
||||
# for i in std gam ncl; do
|
||||
# cp bin/vasp_$i $out/bin/vasp-cpu-${version}-$i
|
||||
# done
|
||||
# '';
|
||||
# doStrip = false;
|
||||
# doFixup = false;
|
||||
# }
|
||||
{
|
||||
stdenvNoCC, requireFile, rsync, blas, scalapack, openmpi, openmp, gfortran, gcc, fftwMpi
|
||||
}:
|
||||
stdenvNoCC.mkDerivation rec
|
||||
{
|
||||
pname = "vasp";
|
||||
version = "6.4.0";
|
||||
# nix-store --query --hash $(nix store add-path ./vasp-6.4.0)
|
||||
src = requireFile
|
||||
{
|
||||
name = "${pname}-${version}";
|
||||
sha256 = "189i1l5q33ynmps93p2mwqf5fx7p4l50sls1krqlv8ls14s3m71f";
|
||||
hashMode = "recursive";
|
||||
message = "Source file not found.";
|
||||
};
|
||||
# VASP_TARGET_CPU = if config ? oneapiArch then "-x${config.oneapiArch}" else "";
|
||||
# MKLROOT = mkl;
|
||||
makeFlags = "DEPS=1";
|
||||
enableParallelBuilding = true;
|
||||
buildInputs = [ blas scalapack openmpi openmp gfortran gfortran.cc gcc fftwMpi.dev fftwMpi ];
|
||||
nativeBuildInputs = [ rsync ];
|
||||
FFTW_ROOT = fftwMpi.dev;
|
||||
configurePhase =
|
||||
''
|
||||
cp ${./makefile.include/${version}-gnu} makefile.include
|
||||
chmod +w makefile.include
|
||||
echo "CPP_OPTIONS += -Duse_shmem -Dshmem_bcast_buffer -Dshmem_rproj" >> makefile.include
|
||||
echo "OBJECTS_LIB += getshmem.o" >> makefile.include
|
||||
mkdir -p bin
|
||||
'';
|
||||
installPhase =
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
for i in std gam ncl; do
|
||||
cp bin/vasp_$i $out/bin/vasp-gnu-${version}-$i
|
||||
done
|
||||
'';
|
||||
}
|
||||
46
local/pkgs/vasp/gnu/default.nix
Normal file
46
local/pkgs/vasp/gnu/default.nix
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
stdenvNoCC, requireFile, writeShellApplication,
|
||||
rsync, blas, scalapack, mpi, openmp, gfortran, gcc, fftwMpi, hdf5, wannier90
|
||||
}:
|
||||
let
|
||||
sources = import ../source.nix { inherit requireFile; };
|
||||
vasp = version: stdenvNoCC.mkDerivation rec
|
||||
{
|
||||
pname = "vasp-gnu";
|
||||
inherit version;
|
||||
src = sources.${version};
|
||||
configurePhase =
|
||||
''
|
||||
cp ${./makefile.include-${version}} makefile.include
|
||||
cp ${../constr_cell_relax.F} src/constr_cell_relax.F
|
||||
mkdir -p bin
|
||||
'';
|
||||
enableParallelBuilding = true;
|
||||
makeFlags = "DEPS=1";
|
||||
buildInputs = [ blas scalapack mpi openmp fftwMpi.dev fftwMpi hdf5 hdf5.dev wannier90 ];
|
||||
nativeBuildInputs = [ rsync gfortran gfortran.cc gcc ];
|
||||
FFTW_ROOT = fftwMpi.dev;
|
||||
HDF5_ROOT = hdf5.dev;
|
||||
WANNIER90_ROOT = wannier90;
|
||||
installPhase =
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
for i in std gam ncl; do
|
||||
cp bin/vasp_$i $out/bin/vasp-$i
|
||||
done
|
||||
'';
|
||||
};
|
||||
startScript = version: writeShellApplication
|
||||
{
|
||||
name = "vasp-gnu-${version}";
|
||||
runtimeInputs = [ (vasp version) ];
|
||||
text =
|
||||
''
|
||||
if [ -n "''${SLURM_CPUS_PER_TASK-}" ] && [ -n "''${SLURM_THREADS_PER_CPU-}" ]; then
|
||||
export OMP_NUM_THREADS=$(( SLURM_CPUS_PER_TASK * SLURM_THREADS_PER_CPU ))
|
||||
fi
|
||||
export PATH=$PATH:$PWD
|
||||
exec "$@"
|
||||
'';
|
||||
};
|
||||
in builtins.mapAttrs (version: _: startScript version) sources
|
||||
92
local/pkgs/vasp/gnu/makefile.include-6.3.1
Normal file
92
local/pkgs/vasp/gnu/makefile.include-6.3.1
Normal file
@@ -0,0 +1,92 @@
|
||||
# Default precompiler options
|
||||
CPP_OPTIONS = -DHOST=\"LinuxGNU\" \
|
||||
-DMPI -DMPI_BLOCK=8000 -Duse_collective \
|
||||
-DscaLAPACK \
|
||||
-DCACHE_SIZE=4000 \
|
||||
-Davoidalloc \
|
||||
-Dvasp6 \
|
||||
-Duse_bse_te \
|
||||
-Dtbdyn \
|
||||
-Dfock_dblbuf \
|
||||
-D_OPENMP -Duse_shmem -Dshmem_bcast_buffer -Dshmem_rproj
|
||||
|
||||
CPP = gcc -E -C -w $*$(FUFFIX) >$*$(SUFFIX) $(CPP_OPTIONS)
|
||||
|
||||
FC = mpif90 -fopenmp
|
||||
FCL = mpif90 -fopenmp
|
||||
|
||||
FREE = -ffree-form -ffree-line-length-none
|
||||
|
||||
FFLAGS = -w -ffpe-summary=none
|
||||
|
||||
OFLAG = -O2
|
||||
OFLAG_IN = $(OFLAG)
|
||||
DEBUG = -O0
|
||||
|
||||
OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
|
||||
OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
|
||||
OBJECTS_O2 += fft3dlib.o
|
||||
|
||||
# For what used to be vasp.5.lib
|
||||
CPP_LIB = $(CPP)
|
||||
FC_LIB = $(FC)
|
||||
CC_LIB = gcc
|
||||
CFLAGS_LIB = -O
|
||||
FFLAGS_LIB = -O1
|
||||
FREE_LIB = $(FREE)
|
||||
|
||||
OBJECTS_LIB = linpack_double.o getshmem.o
|
||||
|
||||
# For the parser library
|
||||
CXX_PARS = g++
|
||||
LLIBS = -lstdc++
|
||||
|
||||
##
|
||||
## Customize as of this point! Of course you may change the preceding
|
||||
## part of this file as well if you like, but it should rarely be
|
||||
## necessary ...
|
||||
##
|
||||
|
||||
# When compiling on the target machine itself, change this to the
|
||||
# relevant target when cross-compiling for another architecture
|
||||
# VASP_TARGET_CPU ?= -march=native
|
||||
# FFLAGS += $(VASP_TARGET_CPU)
|
||||
|
||||
# For gcc-10 and higher (comment out for older versions)
|
||||
FFLAGS += -fallow-argument-mismatch
|
||||
|
||||
# BLAS and LAPACK (mandatory)
|
||||
# OPENBLAS_ROOT ?= /path/to/your/openblas/installation
|
||||
# BLASPACK = -L$(OPENBLAS_ROOT)/lib -lopenblas
|
||||
BLASPACK = -lblas
|
||||
|
||||
# scaLAPACK (mandatory)
|
||||
# SCALAPACK_ROOT ?= /path/to/your/scalapack/installation
|
||||
# SCALAPACK = -L$(SCALAPACK_ROOT)/lib -lscalapack
|
||||
SCALAPACK = -lscalapack
|
||||
|
||||
LLIBS += $(SCALAPACK) $(BLASPACK)
|
||||
|
||||
# FFTW (mandatory)
|
||||
FFTW_ROOT ?= /path/to/your/fftw/installation
|
||||
LLIBS += -L$(FFTW_ROOT)/lib -lfftw3 -lfftw3_omp
|
||||
INCS += -I$(FFTW_ROOT)/include
|
||||
|
||||
# HDF5-support (optional but strongly recommended)
|
||||
CPP_OPTIONS+= -DVASP_HDF5
|
||||
HDF5_ROOT ?= /path/to/your/hdf5/installation
|
||||
LLIBS += -L$(HDF5_ROOT)/lib -lhdf5_fortran
|
||||
INCS += -I$(HDF5_ROOT)/include
|
||||
|
||||
# For the VASP-2-Wannier90 interface (optional)
|
||||
CPP_OPTIONS += -DVASP2WANNIER90
|
||||
WANNIER90_ROOT ?= /path/to/your/wannier90/installation
|
||||
LLIBS += -L$(WANNIER90_ROOT)/lib -lwannier
|
||||
|
||||
# For the fftlib library (recommended)
|
||||
#CPP_OPTIONS+= -Dsysv
|
||||
#FCL += fftlib.o
|
||||
#CXX_FFTLIB = g++ -fopenmp -std=c++11 -DFFTLIB_THREADSAFE
|
||||
#INCS_FFTLIB = -I./include -I$(FFTW_ROOT)/include
|
||||
#LIBS += fftlib
|
||||
#LLIBS += -ldl
|
||||
@@ -8,7 +8,7 @@ CPP_OPTIONS = -DHOST=\"LinuxGNU\" \
|
||||
-Duse_bse_te \
|
||||
-Dtbdyn \
|
||||
-Dfock_dblbuf \
|
||||
-D_OPENMP
|
||||
-D_OPENMP -Duse_shmem -Dshmem_bcast_buffer -Dshmem_rproj
|
||||
|
||||
CPP = gcc -E -C -w $*$(FUFFIX) >$*$(SUFFIX) $(CPP_OPTIONS)
|
||||
|
||||
@@ -35,7 +35,7 @@ CFLAGS_LIB = -O
|
||||
FFLAGS_LIB = -O1
|
||||
FREE_LIB = $(FREE)
|
||||
|
||||
OBJECTS_LIB = linpack_double.o
|
||||
OBJECTS_LIB = linpack_double.o getshmem.o
|
||||
|
||||
# For the parser library
|
||||
CXX_PARS = g++
|
||||
@@ -68,21 +68,20 @@ SCALAPACK = -lscalapack
|
||||
LLIBS += $(SCALAPACK) $(BLASPACK)
|
||||
|
||||
# FFTW (mandatory)
|
||||
# FFTW_ROOT ?= /path/to/your/fftw/installation
|
||||
# LLIBS += -L$(FFTW_ROOT)/lib -lfftw3 -lfftw3_omp
|
||||
LLIBS += -lfftw3 -lfftw3_omp
|
||||
FFTW_ROOT ?= /path/to/your/fftw/installation
|
||||
LLIBS += -L$(FFTW_ROOT)/lib -lfftw3 -lfftw3_omp
|
||||
INCS += -I$(FFTW_ROOT)/include
|
||||
|
||||
# HDF5-support (optional but strongly recommended)
|
||||
#CPP_OPTIONS+= -DVASP_HDF5
|
||||
#HDF5_ROOT ?= /path/to/your/hdf5/installation
|
||||
#LLIBS += -L$(HDF5_ROOT)/lib -lhdf5_fortran
|
||||
#INCS += -I$(HDF5_ROOT)/include
|
||||
CPP_OPTIONS+= -DVASP_HDF5
|
||||
HDF5_ROOT ?= /path/to/your/hdf5/installation
|
||||
LLIBS += -L$(HDF5_ROOT)/lib -lhdf5_fortran
|
||||
INCS += -I$(HDF5_ROOT)/include
|
||||
|
||||
# For the VASP-2-Wannier90 interface (optional)
|
||||
#CPP_OPTIONS += -DVASP2WANNIER90
|
||||
#WANNIER90_ROOT ?= /path/to/your/wannier90/installation
|
||||
#LLIBS += -L$(WANNIER90_ROOT)/lib -lwannier
|
||||
CPP_OPTIONS += -DVASP2WANNIER90
|
||||
WANNIER90_ROOT ?= /path/to/your/wannier90/installation
|
||||
LLIBS += -L$(WANNIER90_ROOT)/lib -lwannier
|
||||
|
||||
# For the fftlib library (recommended)
|
||||
CPP_OPTIONS+= -Dsysv
|
||||
71
local/pkgs/vasp/intel/default.nix
Normal file
71
local/pkgs/vasp/intel/default.nix
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
buildFHSEnv, writeScript, stdenvNoCC, requireFile, substituteAll, symlinkJoin,
|
||||
config, oneapiArch ? config.oneapiArch or "SSE3",
|
||||
oneapi, gfortran, gcc, glibc, lmod, rsync, which, hdf5, wannier90
|
||||
}:
|
||||
let
|
||||
versions = import ../source.nix;
|
||||
buildEnv = buildFHSEnv
|
||||
{
|
||||
name = "buildEnv";
|
||||
# make "module load mpi" success
|
||||
targetPkgs = pkgs: with pkgs; [ zlib (writeTextDir "etc/release" "") ];
|
||||
};
|
||||
buildScript = writeScript "build"
|
||||
''
|
||||
. ${lmod}/share/lmod/lmod/init/bash
|
||||
module use ${oneapi}/share/intel/modulefiles
|
||||
module load tbb compiler-rt oclfpga # dependencies
|
||||
module load mpi mkl compiler
|
||||
mkdir -p bin
|
||||
make DEPS=1 -j$NIX_BUILD_CORES std
|
||||
'';
|
||||
include = version: substituteAll
|
||||
{
|
||||
src = ./makefile.include-${version};
|
||||
inherit oneapiArch;
|
||||
gcc = symlinkJoin { name = "gcc"; paths = [ gfortran gfortran.cc gcc ]; };
|
||||
};
|
||||
vasp = version: stdenvNoCC.mkDerivation rec
|
||||
{
|
||||
pname = "vasp";
|
||||
inherit version;
|
||||
src = requireFile
|
||||
{
|
||||
name = "${pname}-${version}";
|
||||
sha256 = versions.${version};
|
||||
hashMode = "recursive";
|
||||
message = "Source file not found.";
|
||||
};
|
||||
configurePhase =
|
||||
''
|
||||
cp ${include version} makefile.include
|
||||
cp ${../constr_cell_relax.F} src/constr_cell_relax.F
|
||||
'';
|
||||
enableParallelBuilding = false;
|
||||
buildInputs = [ hdf5 hdf5.dev wannier90 glibc glibc.dev ];
|
||||
nativeBuildInputs = [ gfortran gfortran.cc gcc rsync which ];
|
||||
HDF5_ROOT = hdf5.dev;
|
||||
WANNIER90_ROOT = wannier90;
|
||||
buildPhase = "${buildEnv}/bin/buildEnv ${buildScript}";
|
||||
installPhase =
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
for i in std gam ncl; do cp bin/vasp_$i $out/bin/vasp-$i; done
|
||||
'';
|
||||
};
|
||||
startScript = version: writeScript "vasp-intel-${version}"
|
||||
''
|
||||
. ${lmod}/share/lmod/lmod/init/bash
|
||||
module use ${oneapi}/share/intel/modulefiles
|
||||
module load tbb compiler-rt oclfpga # dependencies
|
||||
module load mpi mkl compiler
|
||||
exec "$@"
|
||||
'';
|
||||
runEnv = version: buildFHSEnv
|
||||
{
|
||||
name = "vasp-intel-${version}";
|
||||
targetPkgs = pkgs: with pkgs; [ zlib (vasp version) (writeTextDir "etc/release" "") ];
|
||||
runScript = startScript version;
|
||||
};
|
||||
in builtins.mapAttrs (version: _: runEnv version) versions
|
||||
82
local/pkgs/vasp/intel/makefile.include-6.3.1
Normal file
82
local/pkgs/vasp/intel/makefile.include-6.3.1
Normal file
@@ -0,0 +1,82 @@
|
||||
# Default precompiler options
|
||||
CPP_OPTIONS = -DHOST=\"LinuxIFC\" \
|
||||
-DMPI -DMPI_BLOCK=8000 -Duse_collective \
|
||||
-DscaLAPACK \
|
||||
-DCACHE_SIZE=4000 \
|
||||
-Davoidalloc \
|
||||
-Dvasp6 \
|
||||
-Duse_bse_te \
|
||||
-Dtbdyn \
|
||||
-Dfock_dblbuf \
|
||||
-D_OPENMP -Duse_shmem -Dshmem_bcast_buffer -Dshmem_rproj
|
||||
|
||||
CPP = fpp -f_com=no -free -w0 $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
|
||||
|
||||
FC = I_MPI_FC=ifort mpif90 -qopenmp
|
||||
FCL = I_MPI_FC=ifort mpif90
|
||||
|
||||
FREE = -free -names lowercase
|
||||
|
||||
FFLAGS = -assume byterecl -w
|
||||
|
||||
OFLAG = -O2
|
||||
OFLAG_IN = $(OFLAG)
|
||||
DEBUG = -O0
|
||||
|
||||
OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
|
||||
OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
|
||||
OBJECTS_O2 += fft3dlib.o
|
||||
|
||||
# For what used to be vasp.5.lib
|
||||
CPP_LIB = $(CPP)
|
||||
FC_LIB = $(FC)
|
||||
CC_LIB = icc
|
||||
CFLAGS_LIB = -O
|
||||
FFLAGS_LIB = -O1
|
||||
FREE_LIB = $(FREE)
|
||||
|
||||
OBJECTS_LIB = linpack_double.o getshmem.o
|
||||
|
||||
# For the parser library
|
||||
CXX_PARS = icpc
|
||||
LLIBS = -lstdc++
|
||||
|
||||
##
|
||||
## Customize as of this point! Of course you may change the preceding
|
||||
## part of this file as well if you like, but it should rarely be
|
||||
## necessary ...
|
||||
##
|
||||
|
||||
# When compiling on the target machine itself, change this to the
|
||||
# relevant target when cross-compiling for another architecture
|
||||
VASP_TARGET_CPU ?= -x@oneapiArch@
|
||||
FFLAGS += $(VASP_TARGET_CPU)
|
||||
|
||||
# Intel MKL for FFTW, BLAS, LAPACK, and scaLAPACK
|
||||
# (Note: for Intel Parallel Studio's MKL use -mkl instead of -qmkl)
|
||||
FCL += -qmkl
|
||||
MKLROOT ?= /path/to/your/mkl/installation
|
||||
INCS =-I$(MKLROOT)/include/fftw
|
||||
|
||||
# Use a separate scaLAPACK installation (optional but recommended in combination with OpenMPI)
|
||||
# Comment out the two lines below if you want to use scaLAPACK from MKL instead
|
||||
#SCALAPACK_ROOT ?= /path/to/your/scalapack/installation
|
||||
#LLIBS += -L${SCALAPACK_ROOT}/lib -lscalapack
|
||||
|
||||
# HDF5-support (optional but strongly recommended)
|
||||
CPP_OPTIONS+= -DVASP_HDF5
|
||||
HDF5_ROOT ?= /path/to/your/hdf5/installation
|
||||
LLIBS += -L$(HDF5_ROOT)/lib -lhdf5_fortran
|
||||
INCS += -I$(HDF5_ROOT)/include
|
||||
|
||||
# For the VASP-2-Wannier90 interface (optional)
|
||||
CPP_OPTIONS += -DVASP2WANNIER90
|
||||
WANNIER90_ROOT ?= /path/to/your/wannier90/installation
|
||||
LLIBS += -L$(WANNIER90_ROOT)/lib -lwannier
|
||||
|
||||
# For the fftlib library (hardly any benefit in combination with MKL's FFTs)
|
||||
#CPP_OPTION += -Dsysv
|
||||
#FCL = mpif90 fftlib.o -qmkl
|
||||
#CXX_FFTLIB = icpc -qopenmp -std=c++11 -DFFTLIB_USE_MKL -DFFTLIB_THREADSAFE
|
||||
#INCS_FFTLIB = -I./include -I$(MKLROOT)/include/fftw
|
||||
#LIBS += fftlib
|
||||
82
local/pkgs/vasp/intel/makefile.include-6.4.0
Normal file
82
local/pkgs/vasp/intel/makefile.include-6.4.0
Normal file
@@ -0,0 +1,82 @@
|
||||
# Default precompiler options
|
||||
CPP_OPTIONS = -DHOST=\"LinuxIFC\" \
|
||||
-DMPI -DMPI_BLOCK=8000 -Duse_collective \
|
||||
-DscaLAPACK \
|
||||
-DCACHE_SIZE=4000 \
|
||||
-Davoidalloc \
|
||||
-Dvasp6 \
|
||||
-Duse_bse_te \
|
||||
-Dtbdyn \
|
||||
-Dfock_dblbuf \
|
||||
-D_OPENMP -Duse_shmem -Dshmem_bcast_buffer -Dshmem_rproj
|
||||
|
||||
CPP = fpp -f_com=no -free -w0 $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
|
||||
|
||||
FC = I_MPI_F90=ifort mpif90 -qopenmp
|
||||
FCL = I_MPI_F90=ifort mpif90
|
||||
|
||||
FREE = -free -names lowercase
|
||||
|
||||
FFLAGS = -assume byterecl -w
|
||||
|
||||
OFLAG = -O2
|
||||
OFLAG_IN = $(OFLAG)
|
||||
DEBUG = -O0
|
||||
|
||||
OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
|
||||
OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
|
||||
OBJECTS_O2 += fft3dlib.o
|
||||
|
||||
# For what used to be vasp.5.lib
|
||||
CPP_LIB = $(CPP)
|
||||
FC_LIB = $(FC)
|
||||
CC_LIB = icc
|
||||
CFLAGS_LIB = -O
|
||||
FFLAGS_LIB = -O1
|
||||
FREE_LIB = $(FREE)
|
||||
|
||||
OBJECTS_LIB = linpack_double.o getshmem.o
|
||||
|
||||
# For the parser library
|
||||
CXX_PARS = icpc
|
||||
LLIBS = -lstdc++
|
||||
|
||||
##
|
||||
## Customize as of this point! Of course you may change the preceding
|
||||
## part of this file as well if you like, but it should rarely be
|
||||
## necessary ...
|
||||
##
|
||||
|
||||
# When compiling on the target machine itself, change this to the
|
||||
# relevant target when cross-compiling for another architecture
|
||||
VASP_TARGET_CPU ?= -x@oneapiArch@
|
||||
FFLAGS += $(VASP_TARGET_CPU)
|
||||
|
||||
# Intel MKL for FFTW, BLAS, LAPACK, and scaLAPACK
|
||||
# (Note: for Intel Parallel Studio's MKL use -mkl instead of -qmkl)
|
||||
FCL += -qmkl
|
||||
MKLROOT ?= /path/to/your/mkl/installation
|
||||
INCS =-I$(MKLROOT)/include/fftw
|
||||
|
||||
# Use a separate scaLAPACK installation (optional but recommended in combination with OpenMPI)
|
||||
# Comment out the two lines below if you want to use scaLAPACK from MKL instead
|
||||
#SCALAPACK_ROOT ?= /path/to/your/scalapack/installation
|
||||
#LLIBS += -L${SCALAPACK_ROOT}/lib -lscalapack
|
||||
|
||||
# HDF5-support (optional but strongly recommended)
|
||||
CPP_OPTIONS+= -DVASP_HDF5
|
||||
HDF5_ROOT ?= /path/to/your/hdf5/installation
|
||||
LLIBS += -L$(HDF5_ROOT)/lib -lhdf5_fortran
|
||||
INCS += -I$(HDF5_ROOT)/include
|
||||
|
||||
# For the VASP-2-Wannier90 interface (optional)
|
||||
CPP_OPTIONS += -DVASP2WANNIER90
|
||||
WANNIER90_ROOT ?= /path/to/your/wannier90/installation
|
||||
LLIBS += -L$(WANNIER90_ROOT)/lib -lwannier
|
||||
|
||||
# For the fftlib library (hardly any benefit in combination with MKL's FFTs)
|
||||
#CPP_OPTION += -Dsysv
|
||||
#FCL = mpif90 fftlib.o -qmkl
|
||||
#CXX_FFTLIB = icpc -qopenmp -std=c++11 -DFFTLIB_USE_MKL -DFFTLIB_THREADSAFE
|
||||
#INCS_FFTLIB = -I./include -I$(MKLROOT)/include/fftw
|
||||
#LIBS += fftlib
|
||||
71
local/pkgs/vasp/nvidia/default.nix
Normal file
71
local/pkgs/vasp/nvidia/default.nix
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
buildFHSEnv, writeScript, stdenvNoCC, requireFile, substituteAll,
|
||||
config, cudaCapabilities ? config.cudaCapabilities, nvhpcArch ? config.nvhpcArch or "px",
|
||||
nvhpc, lmod, mkl, gfortran, rsync, which, hdf5, wannier90
|
||||
}:
|
||||
let
|
||||
sources = import ../source.nix { inherit requireFile; };
|
||||
buildEnv = buildFHSEnv
|
||||
{
|
||||
name = "buildEnv";
|
||||
targetPkgs = pkgs: with pkgs; [ zlib ];
|
||||
};
|
||||
buildScript = writeScript "build"
|
||||
''
|
||||
. ${lmod}/share/lmod/lmod/init/bash
|
||||
module use ${nvhpc}/share/nvhpc/modulefiles
|
||||
module load nvhpc
|
||||
mkdir -p bin
|
||||
make DEPS=1 -j$NIX_BUILD_CORES
|
||||
'';
|
||||
include = version: substituteAll
|
||||
{
|
||||
src = ./makefile.include-${version};
|
||||
cudaCapabilities = builtins.concatStringsSep "," (builtins.map
|
||||
(cap: "cc${builtins.replaceStrings ["."] [""] cap}")
|
||||
cudaCapabilities);
|
||||
inherit nvhpcArch;
|
||||
};
|
||||
vasp = version: stdenvNoCC.mkDerivation rec
|
||||
{
|
||||
pname = "vasp";
|
||||
inherit version;
|
||||
src = sources.${version};
|
||||
configurePhase =
|
||||
''
|
||||
cp ${include version} makefile.include
|
||||
cp ${../constr_cell_relax.F} src/constr_cell_relax.F
|
||||
'';
|
||||
enableParallelBuilding = true;
|
||||
buildInputs = [ mkl hdf5 wannier90 ];
|
||||
nativeBuildInputs = [ gfortran rsync which ];
|
||||
MKLROOT = "${mkl}";
|
||||
HDF5_ROOT = "${hdf5}";
|
||||
WANNIER90_ROOT = "${wannier90}";
|
||||
buildPhase = "${buildEnv}/bin/buildEnv ${buildScript}";
|
||||
installPhase =
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
for i in std gam ncl; do cp bin/vasp_$i $out/bin/vasp-$i; done
|
||||
'';
|
||||
requiredSystemFeatures = [ "nvhpcarch-${nvhpcArch}" ];
|
||||
};
|
||||
startScript = version: writeScript "vasp-nvidia-${version}"
|
||||
''
|
||||
. ${lmod}/share/lmod/lmod/init/bash
|
||||
module use ${nvhpc}/share/nvhpc/modulefiles
|
||||
module load nvhpc
|
||||
|
||||
# if SLURM_CPUS_PER_TASK and SLURM_THREADS_PER_CPU are set, use them to set OMP_NUM_THREADS
|
||||
if [ -n "''${SLURM_CPUS_PER_TASK-}" ] && [ -n "''${SLURM_THREADS_PER_CPU-}" ]; then
|
||||
export OMP_NUM_THREADS=$(( SLURM_CPUS_PER_TASK * SLURM_THREADS_PER_CPU ))
|
||||
fi
|
||||
exec "$@"
|
||||
'';
|
||||
runEnv = version: buildFHSEnv
|
||||
{
|
||||
name = "vasp-nvidia-${version}";
|
||||
targetPkgs = pkgs: with pkgs; [ zlib (vasp version) ];
|
||||
runScript = startScript version;
|
||||
};
|
||||
in builtins.mapAttrs (version: _: runEnv version) sources
|
||||
109
local/pkgs/vasp/nvidia/makefile.include-6.3.1
Normal file
109
local/pkgs/vasp/nvidia/makefile.include-6.3.1
Normal file
@@ -0,0 +1,109 @@
|
||||
# Default precompiler options
|
||||
CPP_OPTIONS = -DHOST=\"LinuxNV\" \
|
||||
-DMPI -DMPI_BLOCK=8000 -Duse_collective \
|
||||
-DscaLAPACK \
|
||||
-DCACHE_SIZE=4000 \
|
||||
-Davoidalloc \
|
||||
-Dvasp6 \
|
||||
-Duse_bse_te \
|
||||
-Dtbdyn \
|
||||
-Dqd_emulate \
|
||||
-Dfock_dblbuf \
|
||||
-D_OPENMP \
|
||||
-D_OPENACC \
|
||||
-DUSENCCL -DUSENCCLP2P -Duse_shmem -Dshmem_bcast_buffer -Dshmem_rproj
|
||||
|
||||
CPP = nvfortran -Mpreprocess -Mfree -Mextend -E $(CPP_OPTIONS) $*$(FUFFIX) > $*$(SUFFIX)
|
||||
|
||||
# N.B.: you might need to change the cuda-version here
|
||||
# to one that comes with your NVIDIA-HPC SDK
|
||||
FC = mpif90 -acc -gpu=@cudaCapabilities@ -mp
|
||||
FCL = mpif90 -acc -gpu=@cudaCapabilities@ -mp -c++libs
|
||||
|
||||
FREE = -Mfree
|
||||
|
||||
FFLAGS = -Mbackslash -Mlarge_arrays
|
||||
|
||||
OFLAG = -fast
|
||||
|
||||
DEBUG = -Mfree -O0 -traceback
|
||||
|
||||
OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
|
||||
|
||||
LLIBS = -cudalib=cublas,cusolver,cufft,nccl -cuda
|
||||
|
||||
# Redefine the standard list of O1 and O2 objects
|
||||
SOURCE_O1 := pade_fit.o
|
||||
SOURCE_O2 := pead.o
|
||||
|
||||
# For what used to be vasp.5.lib
|
||||
CPP_LIB = $(CPP)
|
||||
FC_LIB = nvfortran
|
||||
CC_LIB = nvc -w
|
||||
CFLAGS_LIB = -O
|
||||
FFLAGS_LIB = -O1 -Mfixed
|
||||
FREE_LIB = $(FREE)
|
||||
|
||||
OBJECTS_LIB = linpack_double.o getshmem.o
|
||||
|
||||
# For the parser library
|
||||
CXX_PARS = nvc++ --no_warnings
|
||||
|
||||
##
|
||||
## Customize as of this point! Of course you may change the preceding
|
||||
## part of this file as well if you like, but it should rarely be
|
||||
## necessary ...
|
||||
##
|
||||
# When compiling on the target machine itself , change this to the
|
||||
# relevant target when cross-compiling for another architecture
|
||||
VASP_TARGET_CPU ?= -tp=@nvhpcArch@
|
||||
FFLAGS += $(VASP_TARGET_CPU)
|
||||
|
||||
# Specify your NV HPC-SDK installation (mandatory)
|
||||
#... first try to set it automatically
|
||||
NVROOT =$(shell which nvfortran | awk -F /compilers/bin/nvfortran '{ print $$1 }')
|
||||
|
||||
# If the above fails, then NVROOT needs to be set manually
|
||||
#NVHPC ?= /opt/nvidia/hpc_sdk
|
||||
#NVVERSION = 21.11
|
||||
#NVROOT = $(NVHPC)/Linux_x86_64/$(NVVERSION)
|
||||
|
||||
## Improves performance when using NV HPC-SDK >=21.11 and CUDA >11.2
|
||||
#OFLAG_IN = -fast -Mwarperf
|
||||
#SOURCE_IN := nonlr.o
|
||||
|
||||
# Software emulation of quadruple precsion (mandatory)
|
||||
QD ?= $(NVROOT)/compilers/extras/qd
|
||||
LLIBS += -L$(QD)/lib -lqdmod -lqd
|
||||
INCS += -I$(QD)/include/qd
|
||||
|
||||
# Intel MKL for FFTW, BLAS, LAPACK, and scaLAPACK
|
||||
MKLROOT ?= /path/to/your/mkl/installation
|
||||
LLIBS_MKL = -Mmkl -L$(MKLROOT)/lib -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64
|
||||
INCS += -I$(MKLROOT)/include/fftw
|
||||
|
||||
# Use a separate scaLAPACK installation (optional but recommended in combination with OpenMPI)
|
||||
# Comment out the two lines below if you want to use scaLAPACK from MKL instead
|
||||
# SCALAPACK_ROOT ?= /path/to/your/scalapack/installation
|
||||
# LLIBS_MKL = -L$(SCALAPACK_ROOT)/lib -lscalapack -Mmkl
|
||||
|
||||
LLIBS += $(LLIBS_MKL)
|
||||
|
||||
# HDF5-support (optional but strongly recommended)
|
||||
CPP_OPTIONS+= -DVASP_HDF5
|
||||
HDF5_ROOT ?= /path/to/your/hdf5/installation
|
||||
LLIBS += -L$(HDF5_ROOT)/lib -lhdf5_fortran
|
||||
INCS += -I$(HDF5_ROOT)/include
|
||||
|
||||
# For the VASP-2-Wannier90 interface (optional)
|
||||
CPP_OPTIONS += -DVASP2WANNIER90
|
||||
WANNIER90_ROOT ?= /path/to/your/wannier90/installation
|
||||
LLIBS += -L$(WANNIER90_ROOT)/lib -lwannier
|
||||
|
||||
# For the fftlib library (hardly any benefit for the OpenACC GPU port, especially in combination with MKL's FFTs)
|
||||
#CPP_OPTIONS+= -Dsysv
|
||||
#FCL += fftlib.o
|
||||
#CXX_FFTLIB = nvc++ -mp --no_warnings -std=c++11 -DFFTLIB_USE_MKL -DFFTLIB_THREADSAFE
|
||||
#INCS_FFTLIB = -I./include -I$(MKLROOT)/include/fftw
|
||||
#LIBS += fftlib
|
||||
#LLIBS += -ldl
|
||||
109
local/pkgs/vasp/nvidia/makefile.include-6.4.0
Normal file
109
local/pkgs/vasp/nvidia/makefile.include-6.4.0
Normal file
@@ -0,0 +1,109 @@
|
||||
# Default precompiler options
|
||||
CPP_OPTIONS = -DHOST=\"LinuxNV\" \
|
||||
-DMPI -DMPI_INPLACE -DMPI_BLOCK=8000 -Duse_collective \
|
||||
-DscaLAPACK \
|
||||
-DCACHE_SIZE=4000 \
|
||||
-Davoidalloc \
|
||||
-Dvasp6 \
|
||||
-Duse_bse_te \
|
||||
-Dtbdyn \
|
||||
-Dqd_emulate \
|
||||
-Dfock_dblbuf \
|
||||
-D_OPENMP \
|
||||
-D_OPENACC \
|
||||
-DUSENCCL -DUSENCCLP2P -Duse_shmem -Dshmem_bcast_buffer -Dshmem_rproj
|
||||
|
||||
CPP = nvfortran -Mpreprocess -Mfree -Mextend -E $(CPP_OPTIONS) $*$(FUFFIX) > $*$(SUFFIX)
|
||||
|
||||
# N.B.: you might need to change the cuda-version here
|
||||
# to one that comes with your NVIDIA-HPC SDK
|
||||
FC = mpif90 -acc -gpu=@cudaCapabilities@ -mp
|
||||
FCL = mpif90 -acc -gpu=@cudaCapabilities@ -mp -c++libs
|
||||
|
||||
FREE = -Mfree
|
||||
|
||||
FFLAGS = -Mbackslash -Mlarge_arrays
|
||||
|
||||
OFLAG = -fast
|
||||
|
||||
DEBUG = -Mfree -O0 -traceback
|
||||
|
||||
OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
|
||||
|
||||
LLIBS = -cudalib=cublas,cusolver,cufft,nccl -cuda
|
||||
|
||||
# Redefine the standard list of O1 and O2 objects
|
||||
SOURCE_O1 := pade_fit.o minimax_dependence.o
|
||||
SOURCE_O2 := pead.o
|
||||
|
||||
# For what used to be vasp.5.lib
|
||||
CPP_LIB = $(CPP)
|
||||
FC_LIB = nvfortran
|
||||
CC_LIB = nvc -w
|
||||
CFLAGS_LIB = -O
|
||||
FFLAGS_LIB = -O1 -Mfixed
|
||||
FREE_LIB = $(FREE)
|
||||
|
||||
OBJECTS_LIB = linpack_double.o getshmem.o
|
||||
|
||||
# For the parser library
|
||||
CXX_PARS = nvc++ --no_warnings
|
||||
|
||||
##
|
||||
## Customize as of this point! Of course you may change the preceding
|
||||
## part of this file as well if you like, but it should rarely be
|
||||
## necessary ...
|
||||
##
|
||||
# When compiling on the target machine itself , change this to the
|
||||
# relevant target when cross-compiling for another architecture
|
||||
VASP_TARGET_CPU ?= -tp=@nvhpcArch@
|
||||
FFLAGS += $(VASP_TARGET_CPU)
|
||||
|
||||
# Specify your NV HPC-SDK installation (mandatory)
|
||||
#... first try to set it automatically
|
||||
NVROOT =$(shell which nvfortran | awk -F /compilers/bin/nvfortran '{ print $$1 }')
|
||||
|
||||
# If the above fails, then NVROOT needs to be set manually
|
||||
#NVHPC ?= /opt/nvidia/hpc_sdk
|
||||
#NVVERSION = 21.11
|
||||
#NVROOT = $(NVHPC)/Linux_x86_64/$(NVVERSION)
|
||||
|
||||
## Improves performance when using NV HPC-SDK >=21.11 and CUDA >11.2
|
||||
#OFLAG_IN = -fast -Mwarperf
|
||||
#SOURCE_IN := nonlr.o
|
||||
|
||||
# Software emulation of quadruple precsion (mandatory)
|
||||
QD ?= $(NVROOT)/compilers/extras/qd
|
||||
LLIBS += -L$(QD)/lib -lqdmod -lqd
|
||||
INCS += -I$(QD)/include/qd
|
||||
|
||||
# Intel MKL for FFTW, BLAS, LAPACK, and scaLAPACK
|
||||
MKLROOT ?= /path/to/your/mkl/installation
|
||||
LLIBS_MKL = -Mmkl -L$(MKLROOT)/lib -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64
|
||||
INCS += -I$(MKLROOT)/include/fftw
|
||||
|
||||
# Use a separate scaLAPACK installation (optional but recommended in combination with OpenMPI)
|
||||
# Comment out the two lines below if you want to use scaLAPACK from MKL instead
|
||||
# SCALAPACK_ROOT ?= /path/to/your/scalapack/installation
|
||||
# LLIBS_MKL = -L$(SCALAPACK_ROOT)/lib -lscalapack -Mmkl
|
||||
|
||||
LLIBS += $(LLIBS_MKL)
|
||||
|
||||
# HDF5-support (optional but strongly recommended)
|
||||
CPP_OPTIONS+= -DVASP_HDF5
|
||||
HDF5_ROOT ?= /path/to/your/hdf5/installation
|
||||
LLIBS += -L$(HDF5_ROOT)/lib -lhdf5_fortran
|
||||
INCS += -I$(HDF5_ROOT)/include
|
||||
|
||||
# For the VASP-2-Wannier90 interface (optional)
|
||||
CPP_OPTIONS += -DVASP2WANNIER90
|
||||
WANNIER90_ROOT ?= /path/to/your/wannier90/installation
|
||||
LLIBS += -L$(WANNIER90_ROOT)/lib -lwannier
|
||||
|
||||
# For the fftlib library (hardly any benefit for the OpenACC GPU port, especially in combination with MKL's FFTs)
|
||||
#CPP_OPTIONS+= -Dsysv
|
||||
#FCL += fftlib.o
|
||||
#CXX_FFTLIB = nvc++ -mp --no_warnings -std=c++11 -DFFTLIB_USE_MKL -DFFTLIB_THREADSAFE
|
||||
#INCS_FFTLIB = -I./include -I$(MKLROOT)/include/fftw
|
||||
#LIBS += fftlib
|
||||
#LLIBS += -ldl
|
||||
16
local/pkgs/vasp/source.nix
Normal file
16
local/pkgs/vasp/source.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{ requireFile }:
|
||||
let
|
||||
hashes =
|
||||
{
|
||||
# nix-store --query --hash $(nix store add-path ./vasp-6.4.0)
|
||||
"6.3.1" = "1xdr5kjxz6v2li73cbx1ls5b1lnm6z16jaa4fpln7d3arnnr1mgx";
|
||||
"6.4.0" = "189i1l5q33ynmps93p2mwqf5fx7p4l50sls1krqlv8ls14s3m71f";
|
||||
};
|
||||
sources = version: sha256: requireFile
|
||||
{
|
||||
name = "vasp-${version}";
|
||||
inherit sha256;
|
||||
hashMode = "recursive";
|
||||
message = "Source file not found.";
|
||||
};
|
||||
in builtins.mapAttrs sources hashes
|
||||
20
local/pkgs/win11os-kde/default.nix
Normal file
20
local/pkgs/win11os-kde/default.nix
Normal 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
|
||||
'';
|
||||
}
|
||||
@@ -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 =
|
||||
''
|
||||
|
||||
@@ -80,6 +80,7 @@ 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
|
||||
{
|
||||
|
||||
@@ -37,6 +37,7 @@ inputs:
|
||||
# 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 =
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
inputs:
|
||||
{
|
||||
imports = inputs.localLib.mkModules [ ./legion.nix ];
|
||||
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; };
|
||||
@@ -8,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 =
|
||||
@@ -82,80 +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 = mkIf (builtins.elem "nvidia" hardware.gpus)
|
||||
{
|
||||
modesetting.enable = true;
|
||||
powerManagement.enable = true;
|
||||
dynamicBoost.enable = true;
|
||||
nvidiaSettings = true;
|
||||
package = inputs.config.boot.kernelPackages.nvidiaPackages.production;
|
||||
};
|
||||
};
|
||||
}
|
||||
)
|
||||
(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
|
||||
(
|
||||
|
||||
87
modules/hardware/gpu.nix
Normal file
87
modules/hardware/gpu.nix
Normal file
@@ -0,0 +1,87 @@
|
||||
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;
|
||||
};
|
||||
dynamicBoost = mkOption { type = types.bool; default = false; };
|
||||
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 should not be loaded
|
||||
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 = inputs.lib.mkIf gpu.dynamicBoost true;
|
||||
nvidiaSettings = true;
|
||||
forceFullCompositionPipeline = true;
|
||||
# package = inputs.config.boot.kernelPackages.nvidiaPackages.production;
|
||||
prime.allowExternalGpu = true;
|
||||
};
|
||||
};
|
||||
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" ];
|
||||
blacklistedKernelModules = [ "nouveau" ];
|
||||
};
|
||||
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;
|
||||
};}
|
||||
)
|
||||
]);
|
||||
}
|
||||
@@ -1,10 +1,6 @@
|
||||
inputs:
|
||||
{
|
||||
imports = inputs.localLib.mkModules
|
||||
[
|
||||
./chromium.nix
|
||||
./steam.nix
|
||||
];
|
||||
imports = inputs.localLib.mkModules [ ./steam.nix ];
|
||||
config =
|
||||
let
|
||||
inherit (inputs.lib) mkIf;
|
||||
@@ -17,7 +13,7 @@ inputs:
|
||||
_packages =
|
||||
[
|
||||
# system management
|
||||
etcher btrfs-assistant snapper-gui libsForQt5.qtstyleplugin-kvantum
|
||||
etcher btrfs-assistant snapper-gui libsForQt5.qtstyleplugin-kvantum ventoy-full cpu-x
|
||||
# password and key management
|
||||
yubikey-manager yubikey-manager-qt yubikey-personalization yubikey-personalization-gui bitwarden
|
||||
# download
|
||||
@@ -25,21 +21,26 @@ 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
|
||||
typora
|
||||
# themes
|
||||
orchis-theme plasma-overdose-kde-theme materia-kde-theme graphite-kde-theme arc-kde-theme materia-theme
|
||||
# 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));
|
||||
};
|
||||
};
|
||||
|
||||
@@ -3,8 +3,9 @@ inputs:
|
||||
config =
|
||||
let
|
||||
inherit (inputs.lib) mkIf;
|
||||
in mkIf (builtins.elem "desktop-fat" inputs.config.nixos.packages._packageSets)
|
||||
in mkIf (builtins.elem "desktop" inputs.config.nixos.packages._packageSets)
|
||||
{
|
||||
programs.chromium = { enable = true; extraOpts.PasswordManagerEnabled = false; };
|
||||
nixos.users.sharedModules =
|
||||
[{
|
||||
config.programs.chromium =
|
||||
@@ -1,6 +1,6 @@
|
||||
inputs:
|
||||
{
|
||||
imports = inputs.localLib.mkModules [ ./vscode.nix ];
|
||||
imports = inputs.localLib.mkModules [ ./vscode.nix ./firefox.nix ./chromium.nix ./plasma ];
|
||||
config =
|
||||
let
|
||||
inherit (inputs.lib) mkIf;
|
||||
@@ -11,36 +11,35 @@ 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 -sel clip "$@"
|
||||
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
|
||||
firefoxpwa
|
||||
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
|
||||
'';
|
||||
}];
|
||||
};
|
||||
programs =
|
||||
{
|
||||
adb.enable = true;
|
||||
wireshark = { enable = true; package = inputs.pkgs.wireshark; };
|
||||
firefox =
|
||||
{
|
||||
enable = true;
|
||||
languagePacks = [ "zh-CN" "en-US" ];
|
||||
nativeMessagingHosts.packages = [ inputs.pkgs.firefoxpwa ];
|
||||
};
|
||||
vim.package = inputs.pkgs.vim-full;
|
||||
yubikey-touch-detector.enable = true;
|
||||
};
|
||||
nixpkgs.config.packageOverrides = pkgs:
|
||||
{
|
||||
|
||||
58
modules/packages/desktop/firefox.nix
Normal file
58
modules/packages/desktop/firefox.nix
Normal 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 plasma-integration
|
||||
(
|
||||
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.readFile "${inputs.topInputs.lepton}/userChrome.css";
|
||||
userContent = builtins.readFile "${inputs.topInputs.lepton}/userContent.css";
|
||||
extraConfig = builtins.readFile "${inputs.topInputs.lepton}/user.js";
|
||||
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" ]; };
|
||||
};
|
||||
}
|
||||
98
modules/packages/desktop/plasma/default.nix
Normal file
98
modules/packages/desktop/plasma/default.nix
Normal file
@@ -0,0 +1,98 @@
|
||||
inputs:
|
||||
{
|
||||
imports = inputs.localLib.mkModules [ ./konsole.nix ];
|
||||
config.nixos.users.sharedModules = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
|
||||
[{
|
||||
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" ];
|
||||
left = [ "more-window-actions" ];
|
||||
};
|
||||
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; }
|
||||
];
|
||||
}];
|
||||
}
|
||||
84
modules/packages/desktop/plasma/konsole.nix
Normal file
84
modules/packages/desktop/plasma/konsole.nix
Normal file
@@ -0,0 +1,84 @@
|
||||
inputs:
|
||||
{
|
||||
config = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
|
||||
{
|
||||
nixos.users.sharedModules =
|
||||
[(hmInputs: {
|
||||
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 (inputs.lib.mkMerge (builtins.map
|
||||
(user:
|
||||
{ "${impermanence.root}".users.${user}.directories = [ ".local/share/konsole" ".local/share/yakuake" ]; })
|
||||
inputs.config.nixos.users.users));
|
||||
};
|
||||
}
|
||||
@@ -17,7 +17,7 @@ inputs:
|
||||
{
|
||||
packages = with inputs.pkgs;
|
||||
{
|
||||
_packages =
|
||||
_packages =
|
||||
[
|
||||
# shell
|
||||
ksh
|
||||
@@ -25,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
|
||||
@@ -45,12 +45,17 @@ inputs:
|
||||
# networking
|
||||
ipset iptables iproute2 dig nettools traceroute tcping-go whois tcpdump nmap inetutils wireguard-tools
|
||||
# nix tools
|
||||
nix-output-monitor nix-tree ssh-to-age
|
||||
nix-output-monitor nix-tree ssh-to-age (callPackage "${inputs.topInputs.nix-fast-build}" {})
|
||||
# office
|
||||
todo-txt-cli
|
||||
todo-txt-cli pdfgrep
|
||||
# development
|
||||
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 pydbus
|
||||
])];
|
||||
};
|
||||
users.sharedModules = [(home-inputs:
|
||||
{
|
||||
|
||||
@@ -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" "wireguard.surface.chn.moe" "192.168.83.5" ];
|
||||
};
|
||||
pc =
|
||||
{
|
||||
ed25519 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMSfREi19OSwQnhdsE8wiNwGSFFJwNGN0M5gN+sdrrLJ";
|
||||
@@ -116,7 +121,7 @@ inputs:
|
||||
(
|
||||
(builtins.map
|
||||
(host: { name = host; value = { inherit host; hostname = "${host}.chn.moe"; }; })
|
||||
[ "vps6" "wireguard.vps6" "vps7" "wireguard.vps7" "wireguard.pc" "wireguard.nas" ])
|
||||
[ "vps6" "wireguard.vps6" "vps7" "wireguard.vps7" "wireguard.pc" "wireguard.nas" "wireguard.surface" ])
|
||||
++ (builtins.map
|
||||
(host:
|
||||
{
|
||||
@@ -135,6 +140,9 @@ inputs:
|
||||
usernameMap =
|
||||
{
|
||||
chn = "linwei/chn";
|
||||
xll = "linwei/Xll";
|
||||
yjq = "linwei/yjq";
|
||||
gb = "kangjunyong/gongbin";
|
||||
};
|
||||
cdString =
|
||||
if host == "jykang" && (usernameMap ? ${hmInputs.config.home.username}) then
|
||||
@@ -161,6 +169,7 @@ 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"; };
|
||||
};
|
||||
};
|
||||
|
||||
1
modules/packages/server/ssh/surface_rsa.pub
Normal file
1
modules/packages/server/ssh/surface_rsa.pub
Normal file
@@ -0,0 +1 @@
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDJAyDl52UVGFPTV/rXFERrXAMY5qZ3g+tpg9HOGdw86G4Nr8Xp/cTxZjF4kSfIkSrGblAV9Lm4US0fW3pGOQu5qQrSAENxqHxdlEyzt7izyF2CklDUeTjs3KHOIZMvSli4z014NPcswBbjwB9Lyrw0fCQ9P1vYkrUHEzL2SMxdack1EQPcMF4MxblDqc+eQhdMCkKE8T1Cb1ZqxeLVMPn9CwjG18JoxL+/xs+MjcsSXYWcoqYTfgfhguMbh0D4Eo32MHS/IzRSxnOHJxhG5xYePcyBlb/CxQuYA+RTqKNE85j7GcL2oEmeZ1b++/9qFT9grwVh+UOBRO2xiMzKDF24nXPJ+eLyd6Z/3swGT4rTVDnrXV5eZUkWLHN093IdLJCTtPVrKV9OxEKr5sU2W0edpirNrlGq7/MYkJX9EbQctDFA69XfQkZlGK9xGutqSgEaVlY54fS0Due+NDrNBPfMKJ9MTmFDOY+NYn05El2rMD39OKbGbCR5ASwSSBlcQeE=
|
||||
@@ -5,62 +5,67 @@ inputs:
|
||||
inherit (inputs.lib) mkIf;
|
||||
in mkIf (builtins.elem "server" inputs.config.nixos.packages._packageSets)
|
||||
{
|
||||
nixos.users.sharedModules = [(home-inputs: { config.programs.zsh =
|
||||
nixos.users.sharedModules = [(home-inputs: { config.programs =
|
||||
{
|
||||
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 =
|
||||
zsh =
|
||||
{
|
||||
path = "${home-inputs.config.xdg.dataHome}/zsh/zsh_history";
|
||||
extended = true;
|
||||
save = 100000000;
|
||||
size = 100000000;
|
||||
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;
|
||||
};
|
||||
};
|
||||
# set bash history file path, avoid overwriting zsh history
|
||||
bash = { enable = true; historyFile = "${home-inputs.config.xdg.dataHome}/bash/bash_history"; };
|
||||
};})];
|
||||
programs.zsh =
|
||||
{
|
||||
|
||||
@@ -14,27 +14,21 @@ inputs:
|
||||
# password and key management
|
||||
electrum jabref
|
||||
# system management
|
||||
wl-mirror ventoy-full
|
||||
wl-mirror nvtop
|
||||
# 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 nur-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 jmol mpi # qchem.quantum-espresso
|
||||
# encryption and password management
|
||||
john crunch hashcat
|
||||
# container and vm
|
||||
@@ -43,13 +37,14 @@ inputs:
|
||||
microsoft-edge
|
||||
# news
|
||||
rssguard newsflash newsboat
|
||||
];
|
||||
yuzu-early-access
|
||||
]
|
||||
++ (builtins.concatLists (builtins.map
|
||||
(compiler: builtins.map (version: localPackages.vasp.${compiler}.${version}) [ "6.3.1" "6.4.0" ])
|
||||
[ "gnu" "nvidia" ]));
|
||||
_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 +71,6 @@ 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;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -40,6 +40,9 @@ inputs:
|
||||
./fail2ban.nix
|
||||
./wireguard.nix
|
||||
./akkoma.nix
|
||||
./gamemode.nix
|
||||
./vikunja.nix
|
||||
./slurm.nix
|
||||
];
|
||||
options.nixos.services = let inherit (inputs.lib) mkOption types; in
|
||||
{
|
||||
|
||||
@@ -14,14 +14,18 @@ inputs:
|
||||
{
|
||||
fontDir.enable = true;
|
||||
packages = with inputs.pkgs;
|
||||
[ noto-fonts source-han-sans source-han-serif source-code-pro hack-font jetbrains-mono nerdfonts ];
|
||||
[
|
||||
noto-fonts source-han-sans source-han-serif source-code-pro hack-font jetbrains-mono nerdfonts hack-font inter
|
||||
noto-fonts-color-emoji roboto sarasa-gothic source-han-mono wqy_microhei wqy_zenhei
|
||||
];
|
||||
fontconfig.defaultFonts =
|
||||
{
|
||||
emoji = [ "Noto Color Emoji" ];
|
||||
monospace = [ "Noto Sans Mono CJK SC" "Sarasa Mono SC" "DejaVu Sans Mono"];
|
||||
sansSerif = [ "Noto Sans CJK SC" "Source Han Sans SC" "DejaVu Sans" ];
|
||||
serif = [ "Noto Serif CJK SC" "Source Han Serif SC" "DejaVu Serif" ];
|
||||
monospace = [ "Hack" "Source Han Mono SC" ];
|
||||
sansSerif = [ "Inter" "Liberation Sans" "Source Han Sans SC" ];
|
||||
serif = [ "Liberation Serif" "Source Han Serif SC" ];
|
||||
};
|
||||
};
|
||||
nixos.users.sharedModules = [{ config.xdg.configFile."fontconfig/conf.d/10-hm-fonts.conf".force = true; }];
|
||||
};
|
||||
}
|
||||
|
||||
30
modules/services/gamemode.nix
Normal file
30
modules/services/gamemode.nix
Normal 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'";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
114
modules/services/slurm.nix
Normal file
114
modules/services/slurm.nix
Normal file
@@ -0,0 +1,114 @@
|
||||
inputs:
|
||||
{
|
||||
options.nixos.services.slurm = let inherit (inputs.lib) mkOption types; in
|
||||
{
|
||||
enable = mkOption { type = types.bool; default = false; };
|
||||
cpu =
|
||||
{
|
||||
cores = mkOption { type = types.ints.unsigned; };
|
||||
threads = mkOption { type = types.ints.unsigned; default = 1; };
|
||||
};
|
||||
memoryMB = mkOption { type = types.ints.unsigned; };
|
||||
gpus = mkOption { type = types.attrsOf types.ints.unsigned; };
|
||||
};
|
||||
config = let inherit (inputs.config.nixos.services) slurm; in inputs.lib.mkIf slurm.enable
|
||||
{
|
||||
services =
|
||||
{
|
||||
slurm =
|
||||
{
|
||||
server.enable = true;
|
||||
package = (inputs.pkgs.slurm.override { enableGtk2 = true; }).overrideAttrs
|
||||
(prev: let inherit (inputs.pkgs.cudaPackages) cuda_nvml_dev; in
|
||||
{
|
||||
buildInputs = prev.buildInputs ++ [ cuda_nvml_dev ];
|
||||
LDFLAGS = [ "-L${cuda_nvml_dev}/lib/stubs" ];
|
||||
nativeBuildInputs = prev.nativeBuildInputs ++ [ inputs.pkgs.wrapGAppsHook ];
|
||||
});
|
||||
clusterName = inputs.config.nixos.system.networking.hostname;
|
||||
dbdserver =
|
||||
{
|
||||
enable = true;
|
||||
dbdHost = "localhost";
|
||||
storagePassFile = inputs.config.sops.secrets."slurm/db".path;
|
||||
extraConfig =
|
||||
''
|
||||
StorageHost=localhost
|
||||
StorageLoc=slurm
|
||||
'';
|
||||
};
|
||||
client.enable = true;
|
||||
controlMachine = "localhost";
|
||||
nodeName =
|
||||
let gpuString = builtins.concatStringsSep "," (builtins.map
|
||||
(gpu: "gpu:${gpu.name}:${builtins.toString gpu.value}")
|
||||
(inputs.localLib.attrsToList slurm.gpus));
|
||||
in inputs.lib.singleton (builtins.concatStringsSep " "
|
||||
[
|
||||
"localhost"
|
||||
"RealMemory=${builtins.toString slurm.memoryMB}"
|
||||
"Sockets=1"
|
||||
"CoresPerSocket=${builtins.toString slurm.cpu.cores}"
|
||||
"ThreadsPerCore=${builtins.toString slurm.cpu.threads}"
|
||||
# "Gres=${gpuString}"
|
||||
"Gres=${gpuString}"
|
||||
"State=UNKNOWN"
|
||||
]);
|
||||
partitionName = [ "localhost Nodes=localhost Default=YES MaxTime=INFINITE State=UP" ];
|
||||
procTrackType = "proctrack/cgroup";
|
||||
extraConfig =
|
||||
let taskProlog =
|
||||
''
|
||||
echo export CUDA_DEVICE_ORDER=PCI_BUS_ID
|
||||
echo export SLURM_THREADS_PER_CPU=${builtins.toString slurm.cpu.threads}
|
||||
'';
|
||||
in
|
||||
''
|
||||
SelectType=select/cons_tres
|
||||
GresTypes=gpu
|
||||
TaskProlog=${inputs.pkgs.writeShellScript "set_env" taskProlog}
|
||||
|
||||
AccountingStorageType=accounting_storage/slurmdbd
|
||||
AccountingStorageHost=localhost
|
||||
AccountingStoreFlags=job_comment,job_env,job_extra,job_script
|
||||
|
||||
JobCompType=jobcomp/filetxt
|
||||
JobCompLoc=/var/log/slurmctld/jobcomp.log
|
||||
|
||||
SchedulerParameters=enable_user_top
|
||||
|
||||
SlurmdDebug=debug2
|
||||
'';
|
||||
extraConfigPaths =
|
||||
let gpuString = builtins.concatStringsSep "\n" (builtins.map
|
||||
(gpu: "Name=gpu Type=${gpu.name} Count=${builtins.toString gpu.value}")
|
||||
(inputs.localLib.attrsToList slurm.gpus));
|
||||
in [(inputs.pkgs.writeTextDir "gres.conf" "AutoDetect=nvml\n${gpuString}")];
|
||||
};
|
||||
munge = { enable = true; password = inputs.config.sops.secrets."munge.key".path; };
|
||||
};
|
||||
systemd =
|
||||
{
|
||||
services.slurmd.environment =
|
||||
{
|
||||
CUDA_PATH = "${inputs.pkgs.cudatoolkit}";
|
||||
LD_LIBRARY_PATH = "${inputs.config.hardware.nvidia.package}/lib";
|
||||
};
|
||||
tmpfiles.rules = [ "d /var/log/slurmctld 700 slurm slurm" ];
|
||||
};
|
||||
sops =
|
||||
{
|
||||
secrets =
|
||||
{
|
||||
"munge.key" =
|
||||
{
|
||||
format = "binary";
|
||||
sopsFile = "${builtins.dirOf inputs.config.sops.defaultSopsFile}/munge.key";
|
||||
owner = inputs.config.systemd.services.munged.serviceConfig.User;
|
||||
};
|
||||
"slurm/db" = { owner = "slurm"; key = "mariadb/slurm"; };
|
||||
};
|
||||
};
|
||||
nixos.services.mariadb = { enable = true; instances.slurm = {}; };
|
||||
};
|
||||
}
|
||||
44
modules/services/vikunja.nix
Normal file
44
modules/services/vikunja.nix
Normal file
@@ -0,0 +1,44 @@
|
||||
inputs:
|
||||
{
|
||||
options.nixos.services.vikunja = let inherit (inputs.lib) mkOption types; in
|
||||
{
|
||||
enable = mkOption { type = types.bool; default = false; };
|
||||
autoStart = mkOption { type = types.bool; default = true; };
|
||||
port = mkOption { type = types.ints.unsigned; default = 3456; };
|
||||
hostname = mkOption { type = types.nonEmptyStr; default = "vikunja.chn.moe"; };
|
||||
};
|
||||
config = let inherit (inputs.config.nixos.services) vikunja; in inputs.lib.mkIf vikunja.enable
|
||||
{
|
||||
services.vikunja =
|
||||
{
|
||||
enable = true;
|
||||
environmentFiles = [ inputs.config.sops.templates."vikunja.env".path ];
|
||||
settings =
|
||||
{
|
||||
service.timezone = "Asia/Shanghai";
|
||||
mailer = { enable = true; host = "mail.chn.moe"; username = "bot@chn.moe"; fromemail = "bot@chn.moe"; };
|
||||
defaultsettings.discoverable_by_email = true;
|
||||
};
|
||||
inherit (vikunja) port;
|
||||
frontendScheme = "https";
|
||||
frontendHostname = vikunja.hostname;
|
||||
database.type = "postgres";
|
||||
};
|
||||
sops =
|
||||
{
|
||||
templates."vikunja.env".content = let placeholder = inputs.config.sops.placeholder; in
|
||||
''
|
||||
VIKUNJA_SERVICE_JWTSECRET=${placeholder."vikunja/jwtsecret"}
|
||||
VIKUNJA_DATABASE_PASSWORD=${placeholder."postgresql/vikunja"}
|
||||
VIKUNJA_MAILER_PASSWORD=${placeholder."mail/bot"}
|
||||
'';
|
||||
secrets = { "vikunja/jwtsecret" = {}; "mail/bot" = {}; };
|
||||
};
|
||||
systemd.services.vikunja-api.enable = vikunja.autoStart;
|
||||
nixos.services =
|
||||
{
|
||||
postgresql = { enable = true; instances.vikunja = {}; };
|
||||
nginx = { enable = true; https.${vikunja.hostname}.global.configName = vikunja.hostname; };
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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))));
|
||||
}
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -6,7 +6,7 @@ inputs:
|
||||
./fileSystems
|
||||
./grub.nix
|
||||
./initrd.nix
|
||||
./kernel.nix
|
||||
./kernel
|
||||
./impermanence.nix
|
||||
./gui.nix
|
||||
./nixpkgs.nix
|
||||
@@ -16,6 +16,7 @@ inputs:
|
||||
./sops.nix
|
||||
./user.nix
|
||||
./sysctl.nix
|
||||
./envfs.nix
|
||||
];
|
||||
config =
|
||||
{
|
||||
@@ -24,24 +25,28 @@ inputs:
|
||||
boot =
|
||||
{
|
||||
supportedFilesystems = [ "ntfs" ];
|
||||
consoleLogLevel = 7;
|
||||
# consoleLogLevel = 7;
|
||||
};
|
||||
hardware.enableAllFirmware = true;
|
||||
environment.sessionVariables = rec
|
||||
environment =
|
||||
{
|
||||
XDG_CACHE_HOME = "$HOME/.cache";
|
||||
XDG_CONFIG_HOME = "$HOME/.config";
|
||||
XDG_DATA_HOME = "$HOME/.local/share";
|
||||
XDG_STATE_HOME = "$HOME/.local/state";
|
||||
# ANDROID_HOME = "${XDG_DATA_HOME}/android";
|
||||
HISTFILE= "${XDG_STATE_HOME}/bash/history";
|
||||
CUDA_CACHE_PATH = "${XDG_CACHE_HOME}/nv";
|
||||
DOCKER_CONFIG = "${XDG_CONFIG_HOME}/docker";
|
||||
GNUPGHOME = "${XDG_DATA_HOME}/gnupg";
|
||||
GTK2_RC_FILES = "${XDG_CONFIG_HOME}/gtk-2.0/gtkrc";
|
||||
XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose";
|
||||
MATHEMATICA_USERBASE = "${XDG_CONFIG_HOME}/mathematica";
|
||||
_JAVA_OPTIONS = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java";
|
||||
sessionVariables = rec
|
||||
{
|
||||
XDG_CACHE_HOME = "$HOME/.cache";
|
||||
XDG_CONFIG_HOME = "$HOME/.config";
|
||||
XDG_DATA_HOME = "$HOME/.local/share";
|
||||
XDG_STATE_HOME = "$HOME/.local/state";
|
||||
# ANDROID_HOME = "${XDG_DATA_HOME}/android";
|
||||
HISTFILE= "${XDG_STATE_HOME}/bash/history";
|
||||
CUDA_CACHE_PATH = "${XDG_CACHE_HOME}/nv";
|
||||
DOCKER_CONFIG = "${XDG_CONFIG_HOME}/docker";
|
||||
GNUPGHOME = "${XDG_DATA_HOME}/gnupg";
|
||||
GTK2_RC_FILES = "${XDG_CONFIG_HOME}/gtk-2.0/gtkrc";
|
||||
XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose";
|
||||
MATHEMATICA_USERBASE = "${XDG_CONFIG_HOME}/mathematica";
|
||||
_JAVA_OPTIONS = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java";
|
||||
};
|
||||
variables.NIXOS_CONFIGURATION_REVISION = inputs.config.system.configurationRevision;
|
||||
};
|
||||
i18n =
|
||||
{ defaultLocale = "C.UTF-8"; supportedLocales = [ "zh_CN.UTF-8/UTF-8" "en_US.UTF-8/UTF-8" "C.UTF-8/UTF-8" ]; };
|
||||
|
||||
12
modules/system/envfs.nix
Normal file
12
modules/system/envfs.nix
Normal 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"; }
|
||||
];
|
||||
}
|
||||
@@ -227,6 +227,7 @@ inputs:
|
||||
grep = "${inputs.pkgs.gnugrep}/bin/grep";
|
||||
awk = "${inputs.pkgs.gawk}/bin/awk";
|
||||
chattr = "${inputs.pkgs.e2fsprogs}/bin/chattr";
|
||||
lsmod = "${inputs.pkgs.kmod}/bin/lsmod";
|
||||
};
|
||||
services.roll-rootfs =
|
||||
{
|
||||
@@ -237,6 +238,8 @@ inputs:
|
||||
serviceConfig.Type = "oneshot";
|
||||
script = let inherit (fileSystems.rollingRootfs) device path; in
|
||||
''
|
||||
while ! lsmod | grep -q btrfs; do sleep 1; done
|
||||
while ! [ -e ${device} ]; do sleep 1; done
|
||||
mount ${device} /mnt -m
|
||||
if [ -f /mnt${path}/current/.timestamp ]
|
||||
then
|
||||
|
||||
@@ -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
|
||||
}
|
||||
''
|
||||
)
|
||||
]
|
||||
]);
|
||||
};
|
||||
};};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
@@ -17,9 +17,12 @@ inputs:
|
||||
services.xserver =
|
||||
{
|
||||
enable = true;
|
||||
displayManager = { sddm.enable = true; defaultSession = "plasmawayland"; };
|
||||
displayManager =
|
||||
{
|
||||
sddm.enable = true;
|
||||
defaultSession = if inputs.config.nixos.hardware.gpu.type == "nvidia" then "plasma" else "plasmawayland";
|
||||
};
|
||||
desktopManager.plasma5.enable = true;
|
||||
videoDrivers = inputs.config.nixos.hardware.gpus;
|
||||
};
|
||||
systemd.services.display-manager = { after = [ "network-online.target" ]; enable = gui.autoStart; };
|
||||
environment =
|
||||
|
||||
@@ -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}" =
|
||||
|
||||
@@ -39,7 +39,8 @@ inputs:
|
||||
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;
|
||||
@@ -79,9 +81,48 @@ inputs:
|
||||
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; }];
|
||||
hibernate-progress = [{ name = "hibernate-progress"; patch = ./hibernate-progress.patch; }];
|
||||
};
|
||||
in
|
||||
builtins.map (name: { inherit name; } // patches.${name}) kernel.patches;
|
||||
in builtins.concatLists (builtins.map (name: patches.${name}) kernel.patches);
|
||||
};};
|
||||
}
|
||||
116
modules/system/kernel/hibernate-progress.patch
Normal file
116
modules/system/kernel/hibernate-progress.patch
Normal file
@@ -0,0 +1,116 @@
|
||||
diff --git a/kernel/power/swap.c b/kernel/power/swap.c
|
||||
index d44f5937f1e5..8905c0438b64 100644
|
||||
--- a/kernel/power/swap.c
|
||||
+++ b/kernel/power/swap.c
|
||||
@@ -552,7 +552,7 @@ static int save_image(struct swap_map_handle *handle,
|
||||
|
||||
hib_init_batch(&hb);
|
||||
|
||||
- pr_info("Saving image data pages (%u pages)...\n",
|
||||
+ pr_err("Saving image data pages (%u pages)...\n",
|
||||
nr_to_write);
|
||||
m = nr_to_write / 10;
|
||||
if (!m)
|
||||
@@ -567,7 +567,7 @@ static int save_image(struct swap_map_handle *handle,
|
||||
if (ret)
|
||||
break;
|
||||
if (!(nr_pages % m))
|
||||
- pr_info("Image saving progress: %3d%%\n",
|
||||
+ pr_err("Image saving progress: %3d%%\n",
|
||||
nr_pages / m * 10);
|
||||
nr_pages++;
|
||||
}
|
||||
@@ -577,7 +577,7 @@ static int save_image(struct swap_map_handle *handle,
|
||||
if (!ret)
|
||||
ret = err2;
|
||||
if (!ret)
|
||||
- pr_info("Image saving done\n");
|
||||
+ pr_err("Image saving done\n");
|
||||
swsusp_show_speed(start, stop, nr_to_write, "Wrote");
|
||||
return ret;
|
||||
}
|
||||
@@ -767,8 +767,8 @@ static int save_image_lzo(struct swap_map_handle *handle,
|
||||
*/
|
||||
handle->reqd_free_pages = reqd_free_pages();
|
||||
|
||||
- pr_info("Using %u thread(s) for compression\n", nr_threads);
|
||||
- pr_info("Compressing and saving image data (%u pages)...\n",
|
||||
+ pr_err("Using %u thread(s) for compression\n", nr_threads);
|
||||
+ pr_err("Compressing and saving image data (%u pages)...\n",
|
||||
nr_to_write);
|
||||
m = nr_to_write / 10;
|
||||
if (!m)
|
||||
@@ -789,7 +789,7 @@ static int save_image_lzo(struct swap_map_handle *handle,
|
||||
data_of(*snapshot), PAGE_SIZE);
|
||||
|
||||
if (!(nr_pages % m))
|
||||
- pr_info("Image saving progress: %3d%%\n",
|
||||
+ pr_err("Image saving progress: %3d%%\n",
|
||||
nr_pages / m * 10);
|
||||
nr_pages++;
|
||||
}
|
||||
@@ -860,7 +860,7 @@ static int save_image_lzo(struct swap_map_handle *handle,
|
||||
if (!ret)
|
||||
ret = err2;
|
||||
if (!ret)
|
||||
- pr_info("Image saving done\n");
|
||||
+ pr_err("Image saving done\n");
|
||||
swsusp_show_speed(start, stop, nr_to_write, "Wrote");
|
||||
out_clean:
|
||||
hib_finish_batch(&hb);
|
||||
@@ -1071,7 +1071,7 @@ static int load_image(struct swap_map_handle *handle,
|
||||
hib_init_batch(&hb);
|
||||
|
||||
clean_pages_on_read = true;
|
||||
- pr_info("Loading image data pages (%u pages)...\n", nr_to_read);
|
||||
+ pr_err("Loading image data pages (%u pages)...\n", nr_to_read);
|
||||
m = nr_to_read / 10;
|
||||
if (!m)
|
||||
m = 1;
|
||||
@@ -1089,7 +1089,7 @@ static int load_image(struct swap_map_handle *handle,
|
||||
if (ret)
|
||||
break;
|
||||
if (!(nr_pages % m))
|
||||
- pr_info("Image loading progress: %3d%%\n",
|
||||
+ pr_err("Image loading progress: %3d%%\n",
|
||||
nr_pages / m * 10);
|
||||
nr_pages++;
|
||||
}
|
||||
@@ -1099,7 +1099,7 @@ static int load_image(struct swap_map_handle *handle,
|
||||
if (!ret)
|
||||
ret = err2;
|
||||
if (!ret) {
|
||||
- pr_info("Image loading done\n");
|
||||
+ pr_err("Image loading done\n");
|
||||
snapshot_write_finalize(snapshot);
|
||||
if (!snapshot_image_loaded(snapshot))
|
||||
ret = -ENODATA;
|
||||
@@ -1283,8 +1283,8 @@ static int load_image_lzo(struct swap_map_handle *handle,
|
||||
}
|
||||
want = ring_size = i;
|
||||
|
||||
- pr_info("Using %u thread(s) for decompression\n", nr_threads);
|
||||
- pr_info("Loading and decompressing image data (%u pages)...\n",
|
||||
+ pr_err("Using %u thread(s) for decompression\n", nr_threads);
|
||||
+ pr_err("Loading and decompressing image data (%u pages)...\n",
|
||||
nr_to_read);
|
||||
m = nr_to_read / 10;
|
||||
if (!m)
|
||||
@@ -1414,7 +1414,7 @@ static int load_image_lzo(struct swap_map_handle *handle,
|
||||
data[thr].unc + off, PAGE_SIZE);
|
||||
|
||||
if (!(nr_pages % m))
|
||||
- pr_info("Image loading progress: %3d%%\n",
|
||||
+ pr_err("Image loading progress: %3d%%\n",
|
||||
nr_pages / m * 10);
|
||||
nr_pages++;
|
||||
|
||||
@@ -1440,7 +1440,7 @@ static int load_image_lzo(struct swap_map_handle *handle,
|
||||
}
|
||||
stop = ktime_get();
|
||||
if (!ret) {
|
||||
- pr_info("Image loading done\n");
|
||||
+ pr_err("Image loading done\n");
|
||||
snapshot_write_finalize(snapshot);
|
||||
if (!snapshot_image_loaded(snapshot))
|
||||
ret = -ENODATA;
|
||||
@@ -4,61 +4,84 @@ 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 = 4;
|
||||
trusted-public-keys = [ "chn:Cc+nowW1LIpe1kyXOZmNaznFDiH1glXmpb4A+WD/DTE=" ];
|
||||
show-trace = true;
|
||||
max-jobs = 4;
|
||||
cores = 0;
|
||||
keep-going = true;
|
||||
keep-outputs = 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;
|
||||
};
|
||||
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
|
||||
))
|
||||
++ (with inputs.config.nixos.system.nixpkgs; if march == null then [] else [ "nvhpcarch-${march}" ]);
|
||||
}
|
||||
# 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";
|
||||
];
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ inputs:
|
||||
capabilities = mkOption { type = types.nullOr (types.nonEmptyListOf types.nonEmptyStr); default = null; };
|
||||
forwardCompat = mkOption { type = types.nullOr types.bool; default = null; };
|
||||
};
|
||||
replaceTensorflow = mkOption { type = types.bool; default = false; };
|
||||
};
|
||||
config =
|
||||
let
|
||||
@@ -18,141 +17,92 @@ inputs:
|
||||
inherit (inputs.lib.strings) hasPrefix splitString;
|
||||
inherit (inputs.localLib) mkConditional attrsToList;
|
||||
inherit (inputs.config.nixos.system) nixpkgs;
|
||||
in mkMerge
|
||||
[
|
||||
{
|
||||
nixpkgs =
|
||||
let
|
||||
permittedInsecurePackages =
|
||||
[ "openssl_1_1" "electron_19" "python2" "electron_12" "electron_24" "zotero" ];
|
||||
hostPlatform = mkConditional (nixpkgs.march != null)
|
||||
{ system = "x86_64-linux"; gcc = { arch = nixpkgs.march; tune = nixpkgs.march; }; }
|
||||
"x86_64-linux";
|
||||
noBuildPackages = [];
|
||||
# noBuildPackages =
|
||||
# [
|
||||
# # chromium
|
||||
# "chromium" "electron" "webkitgtk"
|
||||
# # old python release
|
||||
# "python310"
|
||||
# # nodejs
|
||||
# "nodejs"
|
||||
# # haskell
|
||||
# "haskell"
|
||||
# # libreoffice
|
||||
# "libreoffice" "libreoffice-qt" "libreoffice-fresh"
|
||||
# # java
|
||||
# "openjdk" "jetbrains"
|
||||
# ];
|
||||
in
|
||||
in
|
||||
{
|
||||
nixpkgs =
|
||||
let
|
||||
permittedInsecurePackages =
|
||||
[ "openssl_1_1" "electron_19" "python2" "electron_12" "electron_24" "zotero" "electron_25" ];
|
||||
hostPlatform = if nixpkgs.march != null
|
||||
then { system = "x86_64-linux"; gcc = { arch = nixpkgs.march; tune = nixpkgs.march; }; }
|
||||
else "x86_64-linux";
|
||||
cudaConfig = inputs.lib.optionalAttrs nixpkgs.cuda.enable
|
||||
(
|
||||
{ cudaSupport = true; }
|
||||
// (inputs.lib.optionalAttrs (nixpkgs.cuda.capabilities != null)
|
||||
{ cudaCapabilities = nixpkgs.cuda.capabilities; })
|
||||
// (inputs.lib.optionalAttrs (nixpkgs.cuda.forwardCompat != null)
|
||||
{ cudaForwardCompat = nixpkgs.cuda.forwardCompat; })
|
||||
// (inputs.lib.optionalAttrs (nixpkgs.march != null) { nvhpcArch = nixpkgs.march; })
|
||||
);
|
||||
in
|
||||
{
|
||||
inherit hostPlatform;
|
||||
config = cudaConfig //
|
||||
{
|
||||
inherit hostPlatform;
|
||||
config =
|
||||
{
|
||||
permittedInsecurePackages = map
|
||||
(package: inputs.pkgs.${package}.name)
|
||||
(filter (package: inputs.pkgs ? ${package}) permittedInsecurePackages);
|
||||
allowUnfree = true;
|
||||
qchem-config = { optArch = nixpkgs.march; useCuda = nixpkgs.cuda.enable; };
|
||||
oneapiArch = mkIf (nixpkgs.march != null) nixpkgs.march;
|
||||
};
|
||||
overlays =
|
||||
[(final: prev:
|
||||
let
|
||||
genericPackages = import inputs.topInputs.nixpkgs
|
||||
permittedInsecurePackages = map
|
||||
(package: inputs.pkgs.${package}.name)
|
||||
(filter (package: inputs.pkgs ? ${package}) permittedInsecurePackages);
|
||||
allowUnfree = true;
|
||||
qchem-config = { optArch = nixpkgs.march; useCuda = nixpkgs.cuda.enable; };
|
||||
oneapiArch = mkIf (nixpkgs.march != null) nixpkgs.march;
|
||||
};
|
||||
overlays =
|
||||
[(final: prev:
|
||||
let
|
||||
genericPackages = import inputs.topInputs.nixpkgs
|
||||
{
|
||||
system = "x86_64-linux";
|
||||
config =
|
||||
{
|
||||
system = "x86_64-linux";
|
||||
config =
|
||||
allowUnfree = true;
|
||||
permittedInsecurePackages = let pkgs = inputs.topInputs.nixpkgs.legacyPackages.x86_64-linux; in map
|
||||
(package: pkgs.${package}.name)
|
||||
(filter (package: pkgs ? ${package}) permittedInsecurePackages);
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
inherit genericPackages;
|
||||
unstablePackages = import inputs.topInputs.nixpkgs-unstable
|
||||
{
|
||||
localSystem = hostPlatform;
|
||||
config = cudaConfig //
|
||||
{
|
||||
allowUnfree = true;
|
||||
permittedInsecurePackages = let pkgs = inputs.topInputs.nixpkgs.legacyPackages.x86_64-linux; in map
|
||||
(package: pkgs.${package}.name)
|
||||
(filter (package: pkgs ? ${package}) permittedInsecurePackages);
|
||||
permittedInsecurePackages =
|
||||
let pkgs = inputs.topInputs.nixpkgs-unstable.legacyPackages.x86_64-linux;
|
||||
in map
|
||||
(package: pkgs.${package}.name)
|
||||
(filter (package: pkgs ? ${package}) permittedInsecurePackages);
|
||||
};
|
||||
};
|
||||
targetPythonVersion = inputs.lib.lists.take 2 (splitString "." genericPackages.python3.version);
|
||||
targetPythonName = "python${concatStringsSep "" targetPythonVersion}";
|
||||
in
|
||||
{ inherit genericPackages; }
|
||||
// {
|
||||
unstablePackages = import inputs.topInputs.nixpkgs-unstable
|
||||
{
|
||||
localSystem = hostPlatform;
|
||||
config =
|
||||
{
|
||||
allowUnfree = true;
|
||||
permittedInsecurePackages =
|
||||
let pkgs = inputs.topInputs.nixpkgs-unstable.legacyPackages.x86_64-linux;
|
||||
in map
|
||||
(package: pkgs.${package}.name)
|
||||
(filter (package: pkgs ? ${package}) permittedInsecurePackages);
|
||||
};
|
||||
};
|
||||
}
|
||||
// (
|
||||
if nixpkgs.march != null then
|
||||
let replacedPackages = filter
|
||||
(package: let pname = tryEval genericPackages.${package}.pname or null;
|
||||
in (pname.success && (builtins.elem pname.value noBuildPackages)
|
||||
|| builtins.elem package noBuildPackages))
|
||||
(filter
|
||||
(package: builtins.any (prefix: hasPrefix prefix package) noBuildPackages)
|
||||
(attrNames genericPackages));
|
||||
in listToAttrs (map
|
||||
(package: { name = package; value = genericPackages.${package}; })
|
||||
replacedPackages)
|
||||
else {}
|
||||
)
|
||||
// (
|
||||
if nixpkgs.march != null then
|
||||
{ embree = prev.embree.override { stdenv = final.genericPackages.stdenv; }; }
|
||||
else {}
|
||||
)
|
||||
// (
|
||||
if nixpkgs.replaceTensorflow then
|
||||
{
|
||||
${targetPythonName} = prev.${targetPythonName}.override { packageOverrides = final: prev:
|
||||
{
|
||||
tensorflow = prev.tensorflow.override
|
||||
{
|
||||
cudaSupport = false;
|
||||
customBazelBuild = genericPackages.${targetPythonName}.pkgs.tensorflow.passthru.bazel-build;
|
||||
};
|
||||
};};
|
||||
}
|
||||
else {}
|
||||
)
|
||||
)];
|
||||
};
|
||||
programs.ccache = { enable = true; cacheDir = "/var/lib/ccache"; };
|
||||
nix.settings.extra-sandbox-paths = [ inputs.config.programs.ccache.cacheDir ];
|
||||
boot.kernelPatches = mkIf (nixpkgs.march != null)
|
||||
[{
|
||||
name = "native kernel";
|
||||
patch = null;
|
||||
extraStructuredConfig =
|
||||
let
|
||||
kernelConfig =
|
||||
{
|
||||
alderlake = "MALDERLAKE";
|
||||
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; };
|
||||
}];
|
||||
}
|
||||
{
|
||||
nixpkgs.config = mkIf nixpkgs.cuda.enable
|
||||
(
|
||||
{ cudaSupport = true; }
|
||||
// (if nixpkgs.cuda.capabilities != null then { cudaCapabilities = nixpkgs.cuda.capabilities; } else {})
|
||||
// (if nixpkgs.cuda.forwardCompat != null then { cudaForwardCompat = nixpkgs.cuda.forwardCompat; }
|
||||
else {}));
|
||||
}
|
||||
];
|
||||
}
|
||||
// (inputs.lib.optionalAttrs (nixpkgs.march != null)
|
||||
{ embree = prev.embree.override { stdenv = final.genericPackages.stdenv; }; })
|
||||
)];
|
||||
};
|
||||
programs.ccache = { enable = true; cacheDir = "/var/lib/ccache"; };
|
||||
nix.settings.extra-sandbox-paths = [ inputs.config.programs.ccache.cacheDir ];
|
||||
boot.kernelPatches = mkIf (nixpkgs.march != null)
|
||||
[{
|
||||
name = "native kernel";
|
||||
patch = null;
|
||||
extraStructuredConfig =
|
||||
let
|
||||
kernelConfig =
|
||||
{
|
||||
alderlake = "MALDERLAKE";
|
||||
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; };
|
||||
}];
|
||||
environment.systemPackages = mkIf nixpkgs.cuda.enable [ inputs.pkgs.cudatoolkit ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ inputs:
|
||||
yjq = 1002;
|
||||
yxy = 1003;
|
||||
zem = 1004;
|
||||
gb = 1005;
|
||||
test = 1006;
|
||||
misskey-misskey = 2000;
|
||||
misskey-misskey-old = 2001;
|
||||
frp = 2002;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
inputs:
|
||||
{
|
||||
# imports = inputs.localLib.mkModules [ ./plasma.nix ];
|
||||
imports = inputs.localLib.mkModules [ ./plasma ];
|
||||
config =
|
||||
let
|
||||
inherit (inputs.lib) mkIf;
|
||||
@@ -46,7 +46,10 @@ inputs:
|
||||
}
|
||||
// (listToAttrs (map
|
||||
(system: { name = system; value.forwardAgent = true; })
|
||||
[ "vps6" "wireguard.vps6" "vps7" "wireguard.vps7" "wireguard.pc" "nas" "wireguard.nas" ]));
|
||||
[
|
||||
"vps6" "wireguard.vps6" "vps7" "wireguard.vps7" "wireguard.pc" "nas" "wireguard.nas"
|
||||
"wireguard.surface"
|
||||
]));
|
||||
};
|
||||
home.packages =
|
||||
[
|
||||
|
||||
@@ -1,197 +0,0 @@
|
||||
{
|
||||
# plasma-manager is not mature, so only use
|
||||
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" ];
|
||||
"ksmserver"."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";
|
||||
|
||||
"kcminputrc"."Mouse"."cursorTheme" = "breeze_cursors";
|
||||
"kdeglobals"."KDE"."widgetStyle" = "kvantum";
|
||||
"kdeglobals"."KFileDialog Settings"."Allow Expansion" = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Automatically select filename extension" = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Bookmarks" = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Full Path" = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Inline Previews" = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Preview" = true;
|
||||
"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" = true;
|
||||
"kdeglobals"."KFileDialog Settings"."View Style" = "DetailTree";
|
||||
|
||||
"krunnerrc"."General"."FreeFloating" = true;
|
||||
"krunnerrc"."Plugins"."baloosearchEnabled" = false;
|
||||
"kscreenlockerrc"."Daemon"."Autolock" = false;
|
||||
|
||||
# https://www.fanbox.cc/@peas0125/posts/5405326
|
||||
"kscreenlockerrc"."Greeter.Wallpaper.org.kde.image.General"."Image" = ./wallpaper/fanbox-5405326-x4-chop.png;
|
||||
"kscreenlockerrc"."Greeter.Wallpaper.org.kde.image.General"."PreviewImage" =
|
||||
./wallpaper/fanbox-5405326-x4-chop.png;
|
||||
|
||||
|
||||
"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"."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";
|
||||
};
|
||||
};
|
||||
}
|
||||
77
modules/users/chn/plasma/autostart/default.nix
Normal file
77
modules/users/chn/plasma/autostart/default.nix
Normal file
@@ -0,0 +1,77 @@
|
||||
inputs:
|
||||
{
|
||||
config = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
|
||||
{
|
||||
home-manager.users.chn.config.home.file =
|
||||
let
|
||||
programs =
|
||||
{
|
||||
nheko = rec
|
||||
{
|
||||
fileName = "nheko.desktop";
|
||||
path = inputs.pkgs.writeText fileName (builtins.replaceStrings
|
||||
[ "Exec=nheko %u" ] [ "Exec=bash -c 'sleep 5 && nheko'" ]
|
||||
(builtins.readFile "${inputs.pkgs.nheko}/share/applications/${fileName}"));
|
||||
};
|
||||
kclockd = rec
|
||||
{
|
||||
fileName = "org.kde.kclockd-autostart.desktop";
|
||||
path = "${inputs.pkgs.plasma5Packages.kdeGear.kclock}/etc/xdg/autostart/${fileName}";
|
||||
};
|
||||
yakuake = rec
|
||||
{
|
||||
fileName = "org.kde.yakuake.desktop";
|
||||
path = "${inputs.pkgs.yakuake}/share/applications/${fileName}";
|
||||
};
|
||||
telegram = rec
|
||||
{
|
||||
fileName = "org.telegram.desktop.desktop";
|
||||
path = inputs.pkgs.writeText fileName (builtins.replaceStrings
|
||||
[ "Exec=telegram-desktop -- %u" ] [ "Exec=bash -c 'sleep 5 && telegram-desktop -autostart'" ]
|
||||
(builtins.readFile "${inputs.pkgs.telegram-desktop}/share/applications/${fileName}"));
|
||||
};
|
||||
element = rec
|
||||
{
|
||||
fileName = "element-desktop.desktop";
|
||||
path = inputs.pkgs.writeText fileName (builtins.replaceStrings
|
||||
[ "Exec=element-desktop %u" ] [ "Exec=element-desktop --hidden" ]
|
||||
(builtins.readFile "${inputs.pkgs.element-desktop.desktopItem}/share/applications/${fileName}"));
|
||||
};
|
||||
kmail = rec
|
||||
{
|
||||
fileName = "org.kde.kmail2.desktop";
|
||||
path = "${inputs.pkgs.kmail}/share/applications/${fileName}";
|
||||
};
|
||||
discord = rec
|
||||
{
|
||||
fileName = "discord.desktop";
|
||||
path = inputs.pkgs.writeText fileName (builtins.replaceStrings
|
||||
[ "Exec=Discord" ] [ "Exec=Discord --start-minimized" ]
|
||||
(builtins.readFile "${inputs.pkgs.discord.desktopItem}/share/applications/${fileName}"));
|
||||
};
|
||||
crow-translate = rec
|
||||
{
|
||||
fileName = "io.crow_translate.CrowTranslate.desktop";
|
||||
path = "${inputs.pkgs.crow-translate}/share/applications/${fileName}";
|
||||
};
|
||||
};
|
||||
devices =
|
||||
{
|
||||
pc = [ "nheko" "kclockd" "yakuake" "telegram" "element" "kmail" "discord" "crow-translate" ];
|
||||
surface = [ "kclockd" "yakuake" "telegram" "element" ];
|
||||
};
|
||||
in builtins.listToAttrs (builtins.map
|
||||
(file:
|
||||
{
|
||||
name = ".config/autostart/${programs.${file}.fileName}";
|
||||
value.source = programs.${file}.path;
|
||||
})
|
||||
(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" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
4
modules/users/chn/plasma/default.nix
Normal file
4
modules/users/chn/plasma/default.nix
Normal file
@@ -0,0 +1,4 @@
|
||||
inputs:
|
||||
{
|
||||
imports = inputs.localLib.mkModules [ ./autostart ./wallpaper ./shortcuts.nix ./theme.nix ];
|
||||
}
|
||||
100
modules/users/chn/plasma/shortcuts.nix
Normal file
100
modules/users/chn/plasma/shortcuts.nix
Normal file
@@ -0,0 +1,100 @@
|
||||
inputs:
|
||||
{
|
||||
config = inputs.lib.mkIf inputs.config.nixos.system.gui.enable
|
||||
{
|
||||
home-manager.users.chn.config.programs.plasma =
|
||||
{
|
||||
overrideConfig = true;
|
||||
overrideConfigFiles = [ "kglobalshortcutsrc" "khotkeysrc" ];
|
||||
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+Up";
|
||||
"Window Below Other Windows" = "Meta+Shift+Down";
|
||||
"Window Close" = "Alt+F4";
|
||||
"Window Maximize" = "Meta+Ctrl+Up";
|
||||
"Window Minimize" = "Meta+Ctrl+Down";
|
||||
"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 to the Left" = [ "Ctrl+PgUp" "Ctrl+Num+PgUp" ];
|
||||
"Switch One Desktop to the Right" = [ "Ctrl+PgDown" "Ctrl+Num+PgDown" ];
|
||||
"Window One Desktop to the Left" = [ "Meta+Ctrl+PgUp" "Meta+Ctrl+Num+PgUp" ];
|
||||
"Window One Desktop to the Right" = [ "Meta+Ctrl+PgDown" "Meta+Ctrl+Num+PgDown" ];
|
||||
};
|
||||
}
|
||||
# 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"; }
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
36
modules/users/chn/plasma/theme.nix
Normal file
36
modules/users/chn/plasma/theme.nix
Normal 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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
13
modules/users/chn/plasma/wallpaper/default.nix
Normal file
13
modules/users/chn/plasma/wallpaper/default.nix
Normal 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; };
|
||||
};
|
||||
}
|
||||
BIN
modules/users/chn/plasma/wallpaper/fanbox-5405326.png
LFS
Normal file
BIN
modules/users/chn/plasma/wallpaper/fanbox-5405326.png
LFS
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user