Compare commits
465 Commits
91fa59e397
...
old-master
| Author | SHA1 | Date | |
|---|---|---|---|
| 5cfd7f0858 | |||
| 9c5e22d62d | |||
| 00fe0f46a1 | |||
| 79940876c3 | |||
| 163d19bd05 | |||
| 360f67cfab | |||
| a402bc880c | |||
| c441178910 | |||
| 9c3fbc0ec9 | |||
| 3f8e6b9fcd | |||
| 08e4dda6d2 | |||
| 26a4a26ce0 | |||
| 3380ec5e05 | |||
| e934a2bc9d | |||
| 3387cbcc25 | |||
| 017e0d82f7 | |||
| ac5f4e4dca | |||
| 8835dbd764 | |||
| 84830c66e6 | |||
| cad88f92a8 | |||
| 40372cd0d9 | |||
| 4e0e96f6fe | |||
| b021789a6e | |||
| 3ab0e13960 | |||
| 0166686b6a | |||
| d3b355f651 | |||
| 2ed881cd89 | |||
| 2a07df1d30 | |||
| 52380eae59 | |||
| 2fe84c4cbc | |||
| 3b16b41be3 | |||
| ee481deffb | |||
| b1bad25008 | |||
| 85f38e17a2 | |||
| 08ab01b89c | |||
| 194a6fb7f6 | |||
| 365576778b | |||
| e7490858c6 | |||
| 7606030135 | |||
| e55590f59e | |||
| c3da39c392 | |||
| d3889b3339 | |||
| 28540d8cf3 | |||
| f847621ceb | |||
| 12fe43f95f | |||
| 0e8329eef3 | |||
| df3b21b570 | |||
|
78df61d24a
|
|||
|
8e7da73151
|
|||
|
a7e17e40dc
|
|||
| 0e8bd22347 | |||
| d948f8b752 | |||
| 8f7787e217 | |||
| 30b9b23112 | |||
| 9a056737de | |||
| ac700d34a5 | |||
| 9b681ab7ce | |||
| 9ce394bffd | |||
| 8cd7b713ca | |||
| 8eed90d2bd | |||
| aee54ef39f | |||
| 69f7ab701b | |||
| 4c9bcebcdc | |||
| 86e7c72b9b | |||
| a7dffc33b5 | |||
| 6765dba3e4 | |||
| 0acfb7a8e0 | |||
| dfbb21a5bd | |||
| 2bb3b2fc4a | |||
| 3270fe50a2 | |||
| 499112cdad | |||
| a6698e6a6b | |||
| b394c5a8f4 | |||
| 3d5b845057 | |||
| 9e83565977 | |||
| ce2cda1c41 | |||
| e6aef2cbd0 | |||
| b7603053fa | |||
| 3ca55acfdf | |||
| e505a952af | |||
| 3ad9452637 | |||
| fdd21d0dd0 | |||
| c40871bbfe | |||
| e8f5ce735e | |||
| 4a25056897 | |||
| 89e0c0df28 | |||
| 1b731a756a | |||
| 3d97fada6d | |||
| d1a2bfc90e | |||
| 44e76ce630 | |||
| adb7e0ef35 | |||
| b0875816f2 | |||
| 592da155a9 | |||
| 5376613ec4 | |||
| 74891f0784 | |||
| d66f9f21dd | |||
| cb05482b4f | |||
| e660268661 | |||
| d45b7ea717 | |||
| c205fa4e34 | |||
| 5f055388a5 | |||
| 0bc69789d9 | |||
| 09bc9d9c25 | |||
| 6b53ab4413 | |||
| 4618a149b3 | |||
| 448d85ef9d | |||
| 956b99f02a | |||
| ec2eb8c3ed | |||
| 09a5bdfbe4 | |||
| c49dd15303 | |||
| 38fd0eefa3 | |||
| e386a320ff | |||
| 5ea8d6a6dd | |||
| 7b108431dc | |||
| e80b4d7c31 | |||
| e4c22e91b2 | |||
| 27d4f4f272 | |||
| 978087e53a | |||
| ad9a5bc906 | |||
| 7aeb78426e | |||
| a0d1b31bb6 | |||
| a7775f9a8d | |||
| 7bb11611a8 | |||
| cf9bcc27e0 | |||
| 81073540b0 | |||
| a43f856b53 | |||
| be231b6d2d | |||
| 2f2381ad0f | |||
| 19e90a1ef7 | |||
| 090100f180 | |||
| 3d48d224c9 | |||
| 0317f42613 | |||
| efac36b186 | |||
| d2385ac639 | |||
| d28ed0ab69 | |||
| 1ef6f9a2bb | |||
| 86b7032bbb | |||
| 8c5f4defd7 | |||
| b802a59868 | |||
| 7247f7e665 | |||
| 1d555871a5 | |||
| a2535c996d | |||
| 37e60afb54 | |||
| 3fe138a418 | |||
| 4e7a9f7ce4 | |||
| a6a1af673a | |||
| 2a3a7b2fb2 | |||
| b4ab1c836a | |||
| fb8b4defa7 | |||
| 1bcfbf8cd6 | |||
| 9f43a0e13b | |||
| 3a3c3050ef | |||
| 4419f68948 | |||
| e51fc9ffa5 | |||
| 2ae9e9b635 | |||
| be77f6a5f5 | |||
| 6316a12a67 | |||
| db663913d8 | |||
| b4846b0f6c | |||
| 64a52801ed | |||
| 7a2f37aaa2 | |||
| aae6585f66 | |||
| 1c15e77c83 | |||
| 82fc3209de | |||
| abeab18270 | |||
| 1985b58619 | |||
| 44bd061823 | |||
| e8c309f584 | |||
| 71ae7fb585 | |||
| 8834d561d2 | |||
| 29daa3c364 | |||
| 9c503fbefb | |||
| 51b6a8b612 | |||
| 52213d388d | |||
| edf744db8d | |||
| b82894eaec | |||
| 1c47199891 | |||
| 8738bd4eeb | |||
| 7699783aac | |||
| fee1d4da7e | |||
| b77ce7fb56 | |||
| b4a12625c5 | |||
| 302106ea9a | |||
| 96877de8d9 | |||
| 8878985be6 | |||
| 737578db34 | |||
| 88555e3f8c | |||
| feb2060be7 | |||
| 00999434c2 | |||
| 29d58cc62d | |||
| 587caf262e | |||
| 2730404ca5 | |||
| 84db5e6fd6 | |||
| f4f34a3159 | |||
| 91b8b4a3c5 | |||
| 6cad205269 | |||
| c57bf76969 | |||
| ad4b615211 | |||
| b4518b59cf | |||
| 45dc4124a3 | |||
| bdfe9a48fd | |||
| 1b337d31f8 | |||
| 717cd5a21e | |||
| def5955614 | |||
| 0e3c975cb5 | |||
| 93189a575e | |||
| 36592c44eb | |||
| a34e3752a2 | |||
| 0d2dea94fb | |||
| 7f539d7e06 | |||
| f8ec090836 | |||
| 9a9161fc55 | |||
| 1a0cf96fc4 | |||
| 4bd1648074 | |||
| 15b114ffd6 | |||
| dd6d8c9735 | |||
| e15a3867d4 | |||
| 5cad208de6 | |||
| c8687f7e45 | |||
| d988ef2eff | |||
| b07929eab3 | |||
| b3e397eb4c | |||
| 5ad2c683ed | |||
| 1f06f0fa0c | |||
| 8ca1d84844 | |||
| 998f599be3 | |||
| fcfc6ac149 | |||
| 6e87130166 | |||
| 06f9e6ac6b | |||
| da07aedce2 | |||
| 61427a8bf9 | |||
| 958ad1f025 | |||
| 1c5f3a856f | |||
| 4e2b80defd | |||
| 1c8efd0877 | |||
| 4c5e85031b | |||
| 5688823fcc | |||
| 72faf8365b | |||
| 0e22d6def8 | |||
| 22cc1d33f7 | |||
| 15085c8a05 | |||
| 06748dac1d | |||
| 63851306ac | |||
| 2bdc793c8c | |||
| 85d1c5e34c | |||
| e6b7af5272 | |||
| c0ae8770bc | |||
| 5b51e8947f | |||
| db2c6f7e45 | |||
| 8e8f9e7adb | |||
| d2adc3a6d3 | |||
| 76cd9ea47f | |||
| 2f851bc216 | |||
| 834d3187e5 | |||
| 49be0f208c | |||
| fb23b41dae | |||
| 005a67deaf | |||
| f8097cb5cb | |||
| ff792f5f48 | |||
| 5c48b43ae0 | |||
| b299ead00b | |||
| a92432cf5a | |||
| 82f5d828c2 | |||
| 35a94a9b02 | |||
| b6bd31e159 | |||
| 1d4badda5b | |||
| bd5214a3b9 | |||
| c32f6dea97 | |||
| dd341902fc | |||
| 190e273112 | |||
| 268807d1d0 | |||
| 2953080fb8 | |||
| 9871517be2 | |||
| 736eacaac5 | |||
| 0e66aad099 | |||
| 67a4905a0a | |||
| d52d22e0db | |||
| 42920c2521 | |||
| 4acd35e036 | |||
| 621d20db3a | |||
| 0926f6ec1f | |||
| 61646cb3bd | |||
| c0066c4744 | |||
| ffd0593f51 | |||
| f49ae0773e | |||
| 8fa3fccecb | |||
| 9ee7111453 | |||
| 8de3d2b149 | |||
| bc62e28ca3 | |||
| d612a5453c | |||
| 653d411b9e | |||
| 51c57dbc41 | |||
| 33cd40160e | |||
| a1e8cfea47 | |||
| 5d72ee3da3 | |||
| fdc6445d47 | |||
| e88805947e | |||
| aaefddc44a | |||
| d9d249411d | |||
| c07f75c6bb | |||
| 8d449ba20c | |||
| 10ca572aec | |||
| 75b0f48715 | |||
| 19a451db77 | |||
| ec9be9bb62 | |||
| 7ddd1977f3 | |||
| 7050c505b5 | |||
| 033a1fe97b | |||
| 77cb3c494e | |||
| 6db5772ac4 | |||
| 3e347e673c | |||
| dca274d020 | |||
| c33909f32f | |||
| 64e856e8b9 | |||
| 02f40a8217 | |||
| 77d43b6da9 | |||
| ab55aac5ff | |||
| 9b5bfbb7a3 | |||
| a69a71d1b0 | |||
| 98374bd303 | |||
| 3b6be8a2fc | |||
| 2bb366b9ac | |||
| 2d16709648 | |||
| 9344daa31c | |||
| 80c98041b5 | |||
| 3418e57907 | |||
| 6848b58e39 | |||
| 13a70411aa | |||
| f9c77b433a | |||
| 9d487845f6 | |||
| 3c99c2a662 | |||
| 7d09108c9f | |||
| 0f0a861896 | |||
| beb0d5940e | |||
| 70321ce237 | |||
| 5bd1d67333 | |||
| fad9df61e1 | |||
| d2a80c8c18 | |||
| 599613d139 | |||
| ac4fa9abd4 | |||
| cb3a7b19f7 | |||
| f5d6bf627b | |||
| f1ce815edd | |||
| a2075cfd65 | |||
| 8f1f6f92a8 | |||
| 3416416864 | |||
| 815888fb07 | |||
| 029d9cb1db | |||
| 95fa67ede1 | |||
| a19347161f | |||
| 58c1cc1f7c | |||
| b06399dc70 | |||
| 077eece6b9 | |||
| b3ef53de51 | |||
| e0852ee89b | |||
| dfffc0bdce | |||
| 8257c245b1 | |||
| cd5853cf53 | |||
| b677b827d4 | |||
| b1d5185cca | |||
| a7e66e2246 | |||
| 480c97e952 | |||
| f8fb5fa4ff | |||
| acf9b71f04 | |||
| bf692e6e4e | |||
| c242b65e47 | |||
| 55d6c17776 | |||
| 14b173f67e | |||
| b9001cdf7d | |||
| f892d43b47 | |||
| d9e9ee6e3a | |||
| 79adbe76a8 | |||
| 66fb848ba8 | |||
| 40b1a8f0df | |||
| a0b9d10b14 | |||
| 4c309dea2f | |||
| b3a397eee4 | |||
| 7c1fe1455b | |||
| 2d4b178895 | |||
| 4dd25f2f89 | |||
| 6dcd9d8144 | |||
| 31be81d2b1 | |||
| 826cfdf43f | |||
| a1f258c5ce | |||
| 1c1d3f3231 | |||
| 623d46c03f | |||
| 518a4d6af3 | |||
| 60077948d6 | |||
| c76bfa7f86 | |||
| 6c10933e80 | |||
| 6402605b1f | |||
| 1724535495 | |||
| 5b41670f36 | |||
| ab04855382 | |||
| 684d5e41c5 | |||
| 316ea18e24 | |||
| c916157fcc | |||
| 4e9409db10 | |||
| 94320d9256 | |||
| 9f5941c2be | |||
| fba0f7b739 | |||
| 2e95281af5 | |||
| f4ac9f3186 | |||
| f787343f29 | |||
| 70304d26ff | |||
| 76c10ec22e | |||
| 011e8c2bf8 | |||
| c1f138a9c1 | |||
| 1552eeca12 | |||
| 8769f3d418 | |||
| a4c254fcd6 | |||
| 24fb1846d2 | |||
| 5e77d0b86c | |||
| 494fda126c | |||
| 5cfa2f9611 | |||
| 9539a24bdb | |||
| 98c4d924dd | |||
| 7aae967c65 | |||
| 49f7edddac | |||
| 2f055d9fc5 | |||
| 108abffd2a | |||
| 4c19ad66e3 | |||
| 19c01aeb1d | |||
| fc90b40310 | |||
| 81de0effb1 | |||
| 5ce93ff85a | |||
| c020b9f5d6 | |||
| f47734b524 | |||
| ca3a7d98f5 | |||
| 0d5609ecc2 | |||
| 818edccb34 | |||
| 2815f5bcfd | |||
| c1bbbd7793 | |||
| aa1dd14b62 | |||
| 399103a9b4 | |||
| 74639d3ece | |||
| 613a76ac29 | |||
| c3ea8864bb | |||
| 919f211536 | |||
| 141d77e2b6 | |||
| 44fcb97ec7 | |||
| 543983e9f3 | |||
| 95bbeeb646 | |||
| de2af79810 | |||
| b9aff1dba5 | |||
| 7da979bed2 | |||
| cfe37640ea | |||
| 096e407571 | |||
| ae31b546e7 | |||
| c3a2766bb7 | |||
| b568bb36d4 | |||
| 55f784e6b7 | |||
| dfab84b0ba | |||
| 8f66ba824a | |||
| 79bd4398f3 | |||
| b44afdaaa1 | |||
| 9528fab3ef | |||
| 7e82885d84 | |||
| 57ed0cf319 | |||
| b043ee3b1d | |||
| 9e3bdaabb6 | |||
| 77f72ac939 | |||
| fa25a68571 | |||
|
|
ea0f406849 | ||
|
|
9df6be1b6b |
BIN
doc/Intel_Server_Board_S2600WF_TPS_2_6.pdf
Normal file
BIN
doc/R1000WF_SystemIntegration_and_ServiceGuide_Rev2_4.pdf
Normal file
BIN
doc/SEL_TroubleshootingGuide.pdf
Normal file
BIN
doc/bsc-ssf.pdf
Normal file
@@ -11,7 +11,6 @@
|
|||||||
./base/hw.nix
|
./base/hw.nix
|
||||||
./base/net.nix
|
./base/net.nix
|
||||||
./base/nix.nix
|
./base/nix.nix
|
||||||
./base/nosv.nix
|
|
||||||
./base/ntp.nix
|
./base/ntp.nix
|
||||||
./base/rev.nix
|
./base/rev.nix
|
||||||
./base/ssh.nix
|
./base/ssh.nix
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
{
|
|
||||||
nix.settings.system-features = [ "nosv" ];
|
|
||||||
programs.nix-required-mounts.enable = true;
|
|
||||||
programs.nix-required-mounts.allowedPatterns.nosv.paths = [
|
|
||||||
"/sys/devices/system/cpu"
|
|
||||||
"/sys/devices/system/node"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
10326
m/eudy/kernel/configs/defconfig
Normal file
10333
m/eudy/kernel/configs/lockdep
Normal file
1
web/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
./public
|
||||||
6
web/archetypes/default.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: "{{ replace .Name "-" " " | title }}"
|
||||||
|
date: {{ .Date }}
|
||||||
|
draft: true
|
||||||
|
---
|
||||||
|
|
||||||
25
web/content/_index.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|

|
||||||
|
|
||||||
|
Welcome to the jungle, a set of machines with no imposed rules that are fully
|
||||||
|
controlled and maintained by their users.
|
||||||
|
|
||||||
|
The configuration of all the machines is written in a centralized [git
|
||||||
|
repository][config] using the Nix language for NixOS. Changes in the
|
||||||
|
configuration of the machines are introduced by merge requests and pass a review
|
||||||
|
step before being deployed.
|
||||||
|
|
||||||
|
[config]: https://pm.bsc.es/gitlab/rarias/jungle
|
||||||
|
|
||||||
|
The machines have access to the large list of packages available in
|
||||||
|
[Nixpkgs][nixpkgs] and a custom set of packages named [bscpkgs][bscpkgs],
|
||||||
|
specifically tailored to our needs for HPC machines. Users can install their own
|
||||||
|
packages and made them system-wide available by opening a merge request.
|
||||||
|
|
||||||
|
[nixpkgs]: https://github.com/NixOS/nixpkgs
|
||||||
|
[bscpkgs]: https://pm.bsc.es/gitlab/rarias/bscpkgs
|
||||||
|
|
||||||
|
We have put a lot of effort to guarantee very good reproducibility properties in
|
||||||
|
the configuration of the machines and the software they use.
|
||||||
|
|
||||||
|
To enter the jungle machines follow the [instructions](access) to submit a
|
||||||
|
request.
|
||||||
BIN
web/content/access/cave.jpg
Normal file
|
After Width: | Height: | Size: 470 KiB |
16
web/content/access/index.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
title: "Enter the jungle"
|
||||||
|
description: "Request access to the machines"
|
||||||
|
---
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
To request access to the machines we will need some information:
|
||||||
|
|
||||||
|
1. Which machines you want access to ([hut](/hut), [fox](/fox), owl1, owl2, eudy, koro...)
|
||||||
|
1. Your user name (make sure it matches the one you use for the BSC intranet)
|
||||||
|
1. Your real name and surname (for identification purposes)
|
||||||
|
1. The salted hash of your login password, generated with `mkpasswd -m sha-512`
|
||||||
|
1. An SSH public key of type Ed25519 (can be generated with `ssh-keygen -t ed25519`)
|
||||||
|
|
||||||
|
Send an email to <jungle@bsc.es> with the details.
|
||||||
10
web/content/doc/_index.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: "Docs"
|
||||||
|
description: "Documentation for users of jungle machines"
|
||||||
|
date: 2023-09-15
|
||||||
|
---
|
||||||
|
|
||||||
|
If this is the first time you use any of the jungle machines with NixOS, follow
|
||||||
|
the [quick start guide](quickstart).
|
||||||
|
|
||||||
|
|
||||||
234
web/content/doc/quickstart.md
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
---
|
||||||
|
title: "Quick start"
|
||||||
|
date: 2023-09-15
|
||||||
|
---
|
||||||
|
|
||||||
|
This documentation will guide you on how to build custom packages of software
|
||||||
|
and use them in the jungle machines. It has been designed to reduce the friction
|
||||||
|
from users coming from module systems.
|
||||||
|
|
||||||
|
You should be able to access the jungle machines, otherwise [request
|
||||||
|
access](/access).
|
||||||
|
|
||||||
|
## Changes from other HPC machines
|
||||||
|
|
||||||
|
Users of other machines have been using the Lmod tool (module load ...) to add
|
||||||
|
or remove programs from their environment, as well as manually building their
|
||||||
|
own software for too many years.
|
||||||
|
|
||||||
|
While we cannot prevent users from continuing to use this tedious mechanism, we
|
||||||
|
have designed the jungle machines to be much easier to operate by using the nix
|
||||||
|
package manager.
|
||||||
|
|
||||||
|
### Freedom to install packages
|
||||||
|
|
||||||
|
When a user wanted to install a package, it was forced to either do it on its
|
||||||
|
own directory, or request a system administrator to install it in a shared
|
||||||
|
directory, so other users can also use that package.
|
||||||
|
|
||||||
|
This situation is gone, each user can install any package of software by
|
||||||
|
themselves, without requiring any other authorization. When two users request
|
||||||
|
the same package, the same copy will be provided.
|
||||||
|
|
||||||
|
A new package will be downloaded if it is available (someone already built it)
|
||||||
|
or will be built from source on demand.
|
||||||
|
|
||||||
|
### No changes over time
|
||||||
|
|
||||||
|
All users retain the same versions of the packages they request until they
|
||||||
|
decide to update them.
|
||||||
|
|
||||||
|
## Using nix to manage packages
|
||||||
|
|
||||||
|
In this chapter we show how to install packages and enter a development shell to
|
||||||
|
build new programs from source. The examples are done from the hut machine,
|
||||||
|
read [this page](/access) to request access.
|
||||||
|
|
||||||
|
### Installing binaries
|
||||||
|
|
||||||
|
To temporarily install new packages, use:
|
||||||
|
|
||||||
|
```text
|
||||||
|
hut% nix shell jungle#gcc jungle#cowsay jungle#ovni
|
||||||
|
```
|
||||||
|
|
||||||
|
Notice that the packages are described as two parts divided by the `#` symbol.
|
||||||
|
The first part defines where to take the package from and the second part is
|
||||||
|
the name of the package. For now we will use `jungle#<package>`. You can find
|
||||||
|
many more packages here:
|
||||||
|
|
||||||
|
<https://search.nixos.org/packages>
|
||||||
|
|
||||||
|
You will now enter a new shell, where those requested package **binaries are
|
||||||
|
available in $PATH**:
|
||||||
|
|
||||||
|
```text
|
||||||
|
hut% cowsay hello world
|
||||||
|
_____________
|
||||||
|
< hello world >
|
||||||
|
-------------
|
||||||
|
\ ^__^
|
||||||
|
\ (oo)\_______
|
||||||
|
(__)\ )\/\
|
||||||
|
||----w |
|
||||||
|
|| ||
|
||||||
|
|
||||||
|
hut% ovniver
|
||||||
|
LD_LIBRARY_PATH not set
|
||||||
|
libovni: build v1.11.0 (a7103f8), dynamic v1.11.0 (a7103f8)
|
||||||
|
|
||||||
|
hut% gcc --version
|
||||||
|
gcc (GCC) 13.3.0
|
||||||
|
Copyright (C) 2023 Free Software Foundation, Inc.
|
||||||
|
This is free software; see the source for copying conditions. There is NO
|
||||||
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building programs
|
||||||
|
|
||||||
|
The above method only loads new binaries in the `$PATH`. If we try to build a
|
||||||
|
program that includes headers or links with a library, it will fail to find
|
||||||
|
them:
|
||||||
|
|
||||||
|
```text
|
||||||
|
hut$ cat test.c
|
||||||
|
#include <ovni.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
ovni_version_check();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hut% gcc test.c -lovni -o test
|
||||||
|
test.c:1:10: fatal error: ovni.h: No such file or directory
|
||||||
|
1 | #include <ovni.h>
|
||||||
|
| ^~~~~~~~
|
||||||
|
compilation terminated.
|
||||||
|
```
|
||||||
|
|
||||||
|
We could manually add the full path to the ovni include directory with `-I` and
|
||||||
|
the libraries with `-L`, but there is a tool that already perform these steps
|
||||||
|
automatically for us, `nix develop`.
|
||||||
|
|
||||||
|
Let's go back to our original shell first, where those packages are not
|
||||||
|
available anymore:
|
||||||
|
|
||||||
|
```
|
||||||
|
hut% ps
|
||||||
|
PID TTY TIME CMD
|
||||||
|
2356260 pts/1 00:00:01 zsh
|
||||||
|
2457268 pts/1 00:00:00 zsh
|
||||||
|
2457297 pts/1 00:00:00 ps
|
||||||
|
hut% exit
|
||||||
|
hut% ovniver
|
||||||
|
ovniver: command not found
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating a flake.nix
|
||||||
|
|
||||||
|
To define which packages we want, we will write a small file that list them, a
|
||||||
|
flake.nix file.
|
||||||
|
|
||||||
|
First, we will create a new directory where we are going to be working:
|
||||||
|
|
||||||
|
```
|
||||||
|
hut% mkdir example
|
||||||
|
hut% cd exmple
|
||||||
|
```
|
||||||
|
|
||||||
|
Then place this flake.nix file:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
inputs.jungle.url = "jungle";
|
||||||
|
outputs = { self, jungle }:
|
||||||
|
let
|
||||||
|
pkgs = jungle.outputs.packages.x86_64-linux;
|
||||||
|
in {
|
||||||
|
devShells.x86_64-linux.default = pkgs.mkShell {
|
||||||
|
pname = "devshell";
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
ovni gcc cowsay # more packages here...
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Now enter the shell with:
|
||||||
|
|
||||||
|
```
|
||||||
|
hut% nix develop
|
||||||
|
warning: creating lock file '/home/Computational/rarias/example/flake.lock':
|
||||||
|
• Added input 'jungle':
|
||||||
|
'path:/nix/store/27srv8haj6vv4ywrbmw0a8vds561m8rq-source?lastModified=1739479441&narHash=sha256-Kgjs8SO1w9NbPBu8ghwzCxYJ9kvWpoQOT%2BXwPvA9DcU%3D&rev=76396c0d67ef0cf32377d5c1894bb695293bca9d' (2025-02-13)
|
||||||
|
• Added input 'jungle/agenix':
|
||||||
|
'github:ryantm/agenix/f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41?narHash=sha256-b%2Buqzj%2BWa6xgMS9aNbX4I%2BsXeb5biPDi39VgvSFqFvU%3D' (2024-08-10)
|
||||||
|
• Added input 'jungle/agenix/darwin':
|
||||||
|
'github:lnl7/nix-darwin/4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d?narHash=sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0%3D' (2023-11-24)
|
||||||
|
• Added input 'jungle/agenix/darwin/nixpkgs':
|
||||||
|
follows 'jungle/agenix/nixpkgs'
|
||||||
|
• Added input 'jungle/agenix/home-manager':
|
||||||
|
'github:nix-community/home-manager/3bfaacf46133c037bb356193bd2f1765d9dc82c1?narHash=sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE%3D' (2023-12-20)
|
||||||
|
• Added input 'jungle/agenix/home-manager/nixpkgs':
|
||||||
|
follows 'jungle/agenix/nixpkgs'
|
||||||
|
• Added input 'jungle/agenix/nixpkgs':
|
||||||
|
follows 'jungle/nixpkgs'
|
||||||
|
• Added input 'jungle/agenix/systems':
|
||||||
|
'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e?narHash=sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768%3D' (2023-04-09)
|
||||||
|
• Added input 'jungle/bscpkgs':
|
||||||
|
'git+https://git.sr.ht/~rodarima/bscpkgs?ref=refs/heads/master&rev=6782fc6c5b5a29e84a7f2c2d1064f4bcb1288c0f' (2024-11-29)
|
||||||
|
• Added input 'jungle/bscpkgs/nixpkgs':
|
||||||
|
follows 'jungle/nixpkgs'
|
||||||
|
• Added input 'jungle/nixpkgs':
|
||||||
|
'github:NixOS/nixpkgs/9c6b49aeac36e2ed73a8c472f1546f6d9cf1addc?narHash=sha256-i/UJ5I7HoqmFMwZEH6vAvBxOrjjOJNU739lnZnhUln8%3D' (2025-01-14)
|
||||||
|
|
||||||
|
hut$
|
||||||
|
```
|
||||||
|
|
||||||
|
Notice that long list of messages is Nix creating a new flake.lock file with the
|
||||||
|
current state of the packages. Next invocations will use the same packages as
|
||||||
|
described by the lock file.
|
||||||
|
|
||||||
|
### Building a program from nix develop
|
||||||
|
|
||||||
|
Now let's try again building our test program:
|
||||||
|
|
||||||
|
```text
|
||||||
|
hut$ cat test.c
|
||||||
|
#include <ovni.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
ovni_version_check();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
hut$ gcc test.c -o test -lovni
|
||||||
|
hut$ ldd test
|
||||||
|
linux-vdso.so.1 (0x00007ffff7fc4000)
|
||||||
|
libovni.so.1 => /nix/store/sqk972akjv0q8dchn8ccjln2llzyyfd0-ovni-1.11.0/lib/libovni.so.1 (0x00007ffff7fab000)
|
||||||
|
libc.so.6 => /nix/store/nqb2ns2d1lahnd5ncwmn6k84qfd7vx2k-glibc-2.40-36/lib/libc.so.6 (0x00007ffff7db2000)
|
||||||
|
/nix/store/nqb2ns2d1lahnd5ncwmn6k84qfd7vx2k-glibc-2.40-36/lib/ld-linux-x86-64.so.2 => /nix/store/nqb2ns2d1lahnd5ncwmn6k84qfd7vx2k-glibc-2.40-36/lib64/ld-linux-x86-64.so.2 (0x00007ffff7fc6000)
|
||||||
|
hut$ ./test
|
||||||
|
```
|
||||||
|
|
||||||
|
Now the ovni.h header and the libovni library are found and the program is
|
||||||
|
successfully built, linked and executed.
|
||||||
|
|
||||||
|
You can add more packages as needed in your flake.nix:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
ovni gcc cowsay # more packages here...
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure you exit the develop shell first, and then enter again with `nix
|
||||||
|
develop`.
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
- `nix shell` places binaries in the `$PATH`.
|
||||||
|
- `nix develop` enters a development shell where both binaries and the libraries
|
||||||
|
and includes are available so you can build new programs.
|
||||||
10
web/content/eudy/_index.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: "Eudy"
|
||||||
|
description: "Linux kernel experiments"
|
||||||
|
---
|
||||||
|
|
||||||
|
[](https://commons.wikimedia.org/w/index.php?curid=5817408)
|
||||||
|
|
||||||
|
The *eudy* machine is destined as a playground for Linux kernel experiments. The
|
||||||
|
name is a shorthand of the Eudyptula species of little penguins found the New
|
||||||
|
Zealand and Australia.
|
||||||
BIN
web/content/eudy/eudy.jpg
Normal file
|
After Width: | Height: | Size: 210 KiB |
117
web/content/fox/_index.md
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
---
|
||||||
|
title: "Fox"
|
||||||
|
description: "AMD Genoa 9684X with 2 NVIDIA RTX4000 GPUs"
|
||||||
|
date: 2025-02-12
|
||||||
|
---
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Picture by [Joanne Redwood](https://web.archive.org/web/20191109175146/https://www.inaturalist.org/photos/6568074),
|
||||||
|
[CC0](http://creativecommons.org/publicdomain/zero/1.0/deed.en).
|
||||||
|
|
||||||
|
The *fox* machine is a big GPU server that is configured to run heavy workloads.
|
||||||
|
It has two fast AMD CPUs with large cache and 2 reasonable NVIDIA GPUs. Here are
|
||||||
|
the detailed specifications:
|
||||||
|
|
||||||
|
- 2x AMD GENOA X 9684X DP/UP 96C/192T 2.55G 1,150M 400W SP5 3D V-cach
|
||||||
|
- 24x 32GB DDR5-4800 ECC RDIMM (total 768 GiB of RAM)
|
||||||
|
- 1x 2.5" SSD SATA3 MICRON 5400 MAX 480GB
|
||||||
|
- 2x 2.5" KIOXIA CM7-R 1.92TB NVMe GEN5 PCIe 5x4
|
||||||
|
- 2x NVIDIA RTX4000 ADA Gen 20GB GDDR6 PCIe 4.0
|
||||||
|
|
||||||
|
## Access
|
||||||
|
|
||||||
|
To access the machine, request a SLURM session from [apex](/apex) using the `fox`
|
||||||
|
partition. If you need the machine for performance measurements, use an
|
||||||
|
exclusive reservation:
|
||||||
|
|
||||||
|
apex% salloc -p fox --exclusive
|
||||||
|
|
||||||
|
Otherwise, specify the CPUs that you need so other users can also use the node
|
||||||
|
at the same time:
|
||||||
|
|
||||||
|
apex% salloc -p fox -c 8
|
||||||
|
|
||||||
|
Then use srun to execute an interactive shell:
|
||||||
|
|
||||||
|
apex% srun --pty $SHELL
|
||||||
|
fox%
|
||||||
|
|
||||||
|
Make sure you get all CPUs you expect:
|
||||||
|
|
||||||
|
fox% grep Cpus_allowed_list /proc/self/status
|
||||||
|
Cpus_allowed_list: 0-191
|
||||||
|
|
||||||
|
Follow [these steps](/access) if you don't have access to apex or fox.
|
||||||
|
|
||||||
|
## CUDA
|
||||||
|
|
||||||
|
To use CUDA, you can use the following `flake.nix` placed in a new directory to
|
||||||
|
load all the required dependencies:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
inputs.jungle.url = "jungle";
|
||||||
|
|
||||||
|
outputs = { jungle, ... }: {
|
||||||
|
devShell.x86_64-linux = let
|
||||||
|
pkgs = jungle.nixosConfigurations.fox.pkgs;
|
||||||
|
in pkgs.mkShell {
|
||||||
|
name = "cuda-env-shell";
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
git gitRepo gnupg autoconf curl
|
||||||
|
procps gnumake util-linux m4 gperf unzip
|
||||||
|
|
||||||
|
# Cuda packages (more at https://search.nixos.org/packages)
|
||||||
|
cudatoolkit linuxPackages.nvidia_x11
|
||||||
|
cudaPackages.cuda_cudart.static
|
||||||
|
cudaPackages.libcusparse
|
||||||
|
|
||||||
|
libGLU libGL
|
||||||
|
xorg.libXi xorg.libXmu freeglut
|
||||||
|
xorg.libXext xorg.libX11 xorg.libXv xorg.libXrandr zlib
|
||||||
|
ncurses5 stdenv.cc binutils
|
||||||
|
];
|
||||||
|
shellHook = ''
|
||||||
|
export CUDA_PATH=${pkgs.cudatoolkit}
|
||||||
|
export LD_LIBRARY_PATH=/var/run/opengl-driver/lib
|
||||||
|
export SMS=50
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then just run `nix develop` from the same directory:
|
||||||
|
|
||||||
|
% mkdir cuda
|
||||||
|
% cd cuda
|
||||||
|
% vim flake.nix
|
||||||
|
[...]
|
||||||
|
% nix develop
|
||||||
|
$ nvcc -V
|
||||||
|
nvcc: NVIDIA (R) Cuda compiler driver
|
||||||
|
Copyright (c) 2005-2024 NVIDIA Corporation
|
||||||
|
Built on Tue_Feb_27_16:19:38_PST_2024
|
||||||
|
Cuda compilation tools, release 12.4, V12.4.99
|
||||||
|
Build cuda_12.4.r12.4/compiler.33961263_0
|
||||||
|
|
||||||
|
## AMD uProf
|
||||||
|
|
||||||
|
The [AMD uProf](https://www.amd.com/en/developer/uprof.html) performance
|
||||||
|
analysis tool-suite is installed and ready to use.
|
||||||
|
|
||||||
|
See the [AMD uProf user guide](https://docs.amd.com/r/en-US/57368-uProf-user-guide)
|
||||||
|
([PDF backup for v5.1](https://jungle.bsc.es/pub/57368-uprof-user-guide.pdf))
|
||||||
|
for more details on how to use the tools. To use the GUI make sure that you
|
||||||
|
connect to fox using X11 forwarding.
|
||||||
|
|
||||||
|
## Filesystems
|
||||||
|
|
||||||
|
The machine has several file systems available.
|
||||||
|
|
||||||
|
- `/nfs/home`: The `/home` from apex via NFS, which is also shared with other
|
||||||
|
xeon machines. It has about 2 ms of latency, so not suitable for quick random
|
||||||
|
access.
|
||||||
|
- `/nvme{0,1}/$USER`: The two local NVME disks, very fast and large capacity.
|
||||||
|
- `/tmp`: tmpfs, fast but not backed by a disk. Will be erased on reboot.
|
||||||
BIN
web/content/fox/fox.jpg
Normal file
|
After Width: | Height: | Size: 126 KiB |
6
web/content/git/_index.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: "Git"
|
||||||
|
description: "Gitea instance"
|
||||||
|
---
|
||||||
|
|
||||||
|
If you are reading this page, the proxy to the Gitea service is not working.
|
||||||
6
web/content/grafana/_index.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: "Grafana"
|
||||||
|
description: "Monitor metrics"
|
||||||
|
---
|
||||||
|
|
||||||
|
If you are reading this page, the proxy to the Grafana service is not working.
|
||||||
127
web/content/hut/_index.md
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
---
|
||||||
|
title: "Hut"
|
||||||
|
description: "Control node"
|
||||||
|
date: 2023-06-13T19:36:57+02:00
|
||||||
|
---
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
From the hut we monitor and control other nodes. It consist of one node only,
|
||||||
|
which is available at `hut` or `xeon07`. It runs the following services:
|
||||||
|
|
||||||
|
- Prometheus: to store the monitoring data.
|
||||||
|
- Grafana: to plot the data in the web browser.
|
||||||
|
- Slurmctld: to manage the SLURM nodes.
|
||||||
|
- Gitlab runner: to run CI jobs from Gitlab.
|
||||||
|
- Nix binary cache: to serve cached nix builds
|
||||||
|
|
||||||
|
This node is prone to interruptions from all the services it runs, so it is not
|
||||||
|
a good candidate for low noise executions.
|
||||||
|
|
||||||
|
# Binary cache
|
||||||
|
|
||||||
|
We provide a binary cache in `hut`, with the aim of avoiding unnecessary
|
||||||
|
recompilation of packages.
|
||||||
|
|
||||||
|
The cache should contain common packages from bscpkgs, but we don't provide
|
||||||
|
any guarantee that of what will be available in the cache, or for how long.
|
||||||
|
We recommend following the latest version of the `jungle` flake to avoid cache
|
||||||
|
misses.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### From NixOS
|
||||||
|
|
||||||
|
In NixOS, we can add the cache through the `nix.settings` option, which will
|
||||||
|
enable it for all builds in the system.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ ... }: {
|
||||||
|
nix.settings = {
|
||||||
|
extra-substituters = [ "https://jungle.bsc.es/cache" ];
|
||||||
|
extra-trusted-public-keys = [ "jungle.bsc.es:pEc7MlAT0HEwLQYPtpkPLwRsGf80ZI26aj29zMw/HH0=" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Interactively
|
||||||
|
|
||||||
|
The cache can also be specified in a per-command basis through the flags
|
||||||
|
`--substituters` and `--trusted-public-keys`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
nix build --substituters "https://jungle.bsc.es/cache" --trusted-public-keys "jungle.bsc.es:pEc7MlAT0HEwLQYPtpkPLwRsGf80ZI26aj29zMw/HH0=" <...>
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: you'll have to be a trusted user.
|
||||||
|
|
||||||
|
### Nix configuration file (non-nixos)
|
||||||
|
|
||||||
|
If using nix outside of NixOS, you'll have to update `/etc/nix/nix.conf`
|
||||||
|
|
||||||
|
```
|
||||||
|
# echo "extra-substituters = https://jungle.bsc.es/cache" >> /etc/nix/nix.conf
|
||||||
|
# echo "extra-trusted-public-keys = jungle.bsc.es:pEc7MlAT0HEwLQYPtpkPLwRsGf80ZI26aj29zMw/HH0=" >> /etc/nix/nix.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
### Hint in flakes
|
||||||
|
|
||||||
|
By adding the configuration below to a `flake.nix`, when someone uses the flake,
|
||||||
|
`nix` will interactively ask to trust and use the provided binary cache:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
nixConfig = {
|
||||||
|
extra-substituters = [
|
||||||
|
"https://jungle.bsc.es/cache"
|
||||||
|
];
|
||||||
|
extra-trusted-public-keys = [
|
||||||
|
"jungle.bsc.es:pEc7MlAT0HEwLQYPtpkPLwRsGf80ZI26aj29zMw/HH0="
|
||||||
|
];
|
||||||
|
};
|
||||||
|
outputs = { ... }: {
|
||||||
|
...
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Querying the cache
|
||||||
|
|
||||||
|
Check if the cache is available:
|
||||||
|
```sh
|
||||||
|
$ curl https://jungle.bsc.es/cache/nix-cache-info
|
||||||
|
StoreDir: /nix/store
|
||||||
|
WantMassQuery: 1
|
||||||
|
Priority: 30
|
||||||
|
```
|
||||||
|
|
||||||
|
Prevent nix from building locally:
|
||||||
|
```bash
|
||||||
|
nix build --max-jobs 0 <...>
|
||||||
|
```
|
||||||
|
|
||||||
|
Check if a package is in cache:
|
||||||
|
```bash
|
||||||
|
# Do a raw eval on the <package>.outPath (this should not build the package)
|
||||||
|
$ nix eval --raw jungle#openmp.outPath
|
||||||
|
/nix/store/dwnn4dgm1m4184l4xbi0qfrprji9wjmi-openmp-2024.11
|
||||||
|
# Take the hash (everything from / to - in the basename) and curl <hash>.narinfo
|
||||||
|
# if it exists in the cache, it will return HTTP 200 and some information
|
||||||
|
# if not, it will return 404
|
||||||
|
$ curl https://jungle.bsc.es/cache/dwnn4dgm1m4184l4xbi0qfrprji9wjmi.narinfo
|
||||||
|
StorePath: /nix/store/dwnn4dgm1m4184l4xbi0qfrprji9wjmi-openmp-2024.11
|
||||||
|
URL: nar/dwnn4dgm1m4184l4xbi0qfrprji9wjmi-17imkdfqzmnb013d14dx234bx17bnvws8baf3ii1xra5qi2y1wiz.nar
|
||||||
|
Compression: none
|
||||||
|
NarHash: sha256:17imkdfqzmnb013d14dx234bx17bnvws8baf3ii1xra5qi2y1wiz
|
||||||
|
NarSize: 1519328
|
||||||
|
References: 4gk773fqcsv4fh2rfkhs9bgfih86fdq8-gcc-13.3.0-lib nqb2ns2d1lahnd5ncwmn6k84qfd7vx2k-glibc-2.40-36
|
||||||
|
Deriver: vcn0x8hikc4mvxdkvrdxp61bwa5r7lr6-openmp-2024.11.drv
|
||||||
|
Sig: jungle.bsc.es:GDTOUEs1jl91wpLbb+gcKsAZjpKdARO9j5IQqb3micBeqzX2M/NDtKvgCS1YyiudOUdcjwa3j+hyzV2njokcCA==
|
||||||
|
# In oneline:
|
||||||
|
$ curl "https://jungle.bsc.es/cache/$(nix eval --raw jungle#<package>.outPath | cut -d '/' -f4 | cut -d '-' -f1).narinfo"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### References
|
||||||
|
|
||||||
|
- https://nix.dev/guides/recipes/add-binary-cache.html
|
||||||
|
- https://nixos.wiki/wiki/Binary_Cache
|
||||||
BIN
web/content/hut/hut.jpg
Normal file
|
After Width: | Height: | Size: 178 KiB |
10
web/content/lake/_index.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: "Lake"
|
||||||
|
description: "Data storage"
|
||||||
|
date: 2023-06-13T19:36:57+02:00
|
||||||
|
draft: true
|
||||||
|
---
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Data storage
|
||||||
BIN
web/content/lake/lake.jpg
Normal file
|
After Width: | Height: | Size: 144 KiB |
6
web/content/lists/_index.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: "Lists"
|
||||||
|
description: "Mailing lists"
|
||||||
|
---
|
||||||
|
|
||||||
|
If you are reading this page, the proxy to the public-inbox service is not working.
|
||||||
18
web/content/owl/_index.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
title: "Owl"
|
||||||
|
description: "Low system noise"
|
||||||
|
---
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Much like the silent flight of an owl at night, these nodes are configured to
|
||||||
|
minimize the system noise and let programs run undisturbed. The list of nodes is
|
||||||
|
`owl[1-2]` and are available for jobs with SLURM.
|
||||||
|
|
||||||
|
The contents of the nix store of the hut node is made available in the owl nodes
|
||||||
|
when a job is running. This allows jobs to access the same paths that are on hut
|
||||||
|
to load dependencies.
|
||||||
|
|
||||||
|
For now, only the hut node can be used to build new derivations so that they
|
||||||
|
appear in the compute nodes. This applies to the `nix build`, `nix develop` and
|
||||||
|
`nix shell` commands.
|
||||||
BIN
web/content/owl/owl.jpg
Normal file
|
After Width: | Height: | Size: 49 KiB |
68
web/content/paste/_index.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
title: "Paste"
|
||||||
|
description: "Paste service"
|
||||||
|
author: "Rodrigo Arias Mallo"
|
||||||
|
date: 2024-09-20
|
||||||
|
---
|
||||||
|
|
||||||
|
The tent machine provides a paste service using the program `p` (as in paste).
|
||||||
|
|
||||||
|
You can use it directly from the tent machine or remotely if you have [SSH
|
||||||
|
access](/access) to tent using the following alias:
|
||||||
|
|
||||||
|
```
|
||||||
|
alias p="ssh tent p"
|
||||||
|
```
|
||||||
|
|
||||||
|
You can add it to bashrc or zshrc for persistent installation.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
The `p` command reads from the standard input, uploads the content to a file
|
||||||
|
in the local filesystem and prints the URL to access it. It only accepts an
|
||||||
|
optional argument, which is the extension of the file that will be stored on
|
||||||
|
disk (without the dot). By default it uses the `txt` extension, so plain text
|
||||||
|
can be read in the browser directly.
|
||||||
|
|
||||||
|
```
|
||||||
|
p [extension]
|
||||||
|
```
|
||||||
|
|
||||||
|
To remove files, go to `/var/lib/p/$USER` and remove them manually.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
Share a text file, in this case the source of p itself:
|
||||||
|
|
||||||
|
```
|
||||||
|
tent% p < m/tent/p.nix
|
||||||
|
https://jungle.bsc.es/p/rarias/okbtG130.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Paste the last dmesg lines directly from a pipe:
|
||||||
|
|
||||||
|
```
|
||||||
|
tent% dmesg | tail -5 | p
|
||||||
|
https://jungle.bsc.es/p/rarias/luX4STm9.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Upload a PNG picture from a file:
|
||||||
|
|
||||||
|
```
|
||||||
|
hop% p png < mark-api-cpu.png
|
||||||
|
https://jungle.bsc.es/p/rarias/oSRAMVsE.png
|
||||||
|
```
|
||||||
|
|
||||||
|
Take an screenshot and upload it as a PNG file:
|
||||||
|
|
||||||
|
```
|
||||||
|
hop% scrot -s - | p png
|
||||||
|
https://jungle.bsc.es/p/rarias/SOgK5EV0.png
|
||||||
|
```
|
||||||
|
|
||||||
|
Upload a directory by creating a tar.gz file on the fly:
|
||||||
|
|
||||||
|
```
|
||||||
|
hop% tar c ovni | gzip | p tar.gz
|
||||||
|
https://jungle.bsc.es/p/rarias/tkwROcTR.tar.gz
|
||||||
|
```
|
||||||
71
web/content/posts/2023-09-12/_index.md
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
---
|
||||||
|
title: "Update 2023-09-12"
|
||||||
|
author: "Rodrigo Arias Mallo"
|
||||||
|
date: 2023-09-12
|
||||||
|
---
|
||||||
|
|
||||||
|
This is a summary of notable changes introduced in the jungle cluster in the
|
||||||
|
last months.
|
||||||
|
|
||||||
|
### New Ceph filesystem available
|
||||||
|
|
||||||
|
We have installed the latest [Ceph filesystem][1] (18.2.0) which stores three
|
||||||
|
redundant copies of the data so a failure in one disk doesn't cause data loss.
|
||||||
|
It is mounted in /ceph and available for use in the owl1, owl2 and hut
|
||||||
|
nodes. For now it provides 2.8 TiB of space and it is expected to
|
||||||
|
increase when the last storage node is installed.
|
||||||
|
|
||||||
|
[1]: https://en.wikipedia.org/wiki/Ceph_(software)
|
||||||
|
|
||||||
|
The throughput is limited by the 1 Gigabit Ethernet speed, but should be
|
||||||
|
reasonably fast for most workloads. Here is a test with dd which reaches the
|
||||||
|
network limit:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
hut% dd if=/dev/urandom of=/ceph/rarias/urandom bs=1M count=1024
|
||||||
|
1024+0 records in
|
||||||
|
1024+0 records out
|
||||||
|
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 8,98544 s, 119 MB/s
|
||||||
|
```
|
||||||
|
|
||||||
|
### SLURM power save
|
||||||
|
|
||||||
|
The SLURM daemon has been configured to power down the nodes after one hour of
|
||||||
|
idling. When a new job is allocated to a node that is powered off, it is
|
||||||
|
automatically turned on and as soon as it becomes available it will execute the
|
||||||
|
job. Here is an example with two nodes that boot and execute a simple job that
|
||||||
|
shows the date.
|
||||||
|
|
||||||
|
```txt
|
||||||
|
hut% date; srun -N 2 date
|
||||||
|
2023-09-12T17:36:09 CEST
|
||||||
|
2023-09-12T17:38:26 CEST
|
||||||
|
2023-09-12T17:38:18 CEST
|
||||||
|
```
|
||||||
|
|
||||||
|
You can expect a similar delay (around 2-3 min) while the nodes are starting.
|
||||||
|
Notice that while the nodes are kept on, the delay is not noticeable:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
hut% date; srun -N 2 date
|
||||||
|
2023-09-12T17:40:04 CEST
|
||||||
|
2023-09-12T17:40:04 CEST
|
||||||
|
2023-09-12T17:40:04 CEST
|
||||||
|
```
|
||||||
|
|
||||||
|
### Power and temperature monitoring
|
||||||
|
|
||||||
|
In the cluster, we monitor the temperature and the power draw of all nodes. This
|
||||||
|
allows us to understand which machines are not being used and turn them off to
|
||||||
|
save energy that otherwise would be wasted. Here is an example where some nodes
|
||||||
|
are powered off to save energy:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
We also configured the nodes to work at low CPU frequencies, so the temperature
|
||||||
|
is kept low to increase the lifespan of the node components. Towards these
|
||||||
|
goals, we have configured two alerts that trigger when the CPUs of a node
|
||||||
|
exceeds the limit temperature of 80 °C or when the power draw exceeds 350 W.
|
||||||
|
|
||||||
|
By keeping the power consumption and temperatures controlled, we can safely
|
||||||
|
incorporate more machines that will only be used on demand.
|
||||||
BIN
web/content/posts/2023-09-12/power.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
49
web/content/posts/2025-09-26/_index.md
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
title: "Update 2025-09-26"
|
||||||
|
author: "Rodrigo Arias Mallo"
|
||||||
|
date: 2025-09-26
|
||||||
|
---
|
||||||
|
|
||||||
|
This is a summary of notable changes introduced in the last two years. We
|
||||||
|
continue to maintain all machines updated to the last NixOS release (currently
|
||||||
|
NixOS 25.05).
|
||||||
|
|
||||||
|
### New compute node: fox
|
||||||
|
|
||||||
|
We have a new [fox machine](/fox), with two AMD Genoa 9684X CPUs and two NVIDIA
|
||||||
|
RTX4000 GPUs. During the last months we have been doing some tests and it seems
|
||||||
|
that most of the components work well. We have configured CUDA to use the NVIDIA
|
||||||
|
GPUs, as well as AMD uProf to trace performance and energy counters from the
|
||||||
|
CPUs.
|
||||||
|
|
||||||
|
### Upgraded login node: apex
|
||||||
|
|
||||||
|
We have upgraded the operating system on the login node to NixOS, which now runs
|
||||||
|
Linux 6.15.6. During the upgrade, we have detected a problem with the storage
|
||||||
|
disks. The `/` and `/home` partitions sit on a
|
||||||
|
[RAID 5](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5),
|
||||||
|
transparently handled by a RAID hardware controller which starts its own
|
||||||
|
firmware before passing the control to the BIOS to continue the boot sequence. A
|
||||||
|
problem during the startup of the firmware prevented the node to even reach the
|
||||||
|
BIOS screen.
|
||||||
|
|
||||||
|
After a long debugging session, we detected that the flash memory that stores
|
||||||
|
the firmware of the hardware controller was likely to be the issue, since
|
||||||
|
[memory cells](https://en.wikipedia.org/wiki/Flash_memory#Principles_of_operation)
|
||||||
|
may lose charge over time and can end up corrupting the content. We flashed
|
||||||
|
the latest firmware so the memory cells are charged again with the new bits and
|
||||||
|
that fixed the problem. Hopefully we will be able to use it for some more years.
|
||||||
|
|
||||||
|
The SLURM server has been moved to apex which allows users to also submit jobs
|
||||||
|
to fox.
|
||||||
|
|
||||||
|
### Migrated machines to BSC building
|
||||||
|
|
||||||
|
The server room had a temperature issue that had been affecting our machines
|
||||||
|
since the end of February of 2025. As the summer approached, the temperature
|
||||||
|
exceeded the safe limits for our hardware, so we had to shutdown the cluster.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Since then, we have moved the cluster to BSC premises, where it now rests at a
|
||||||
|
stable temperature, so hopefully we won't have more unscheduled downtime.
|
||||||
BIN
web/content/posts/2025-09-26/temp.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
40
web/hugo.toml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
baseURL = 'https://jungle.bsc.es/'
|
||||||
|
languageCode = 'en-us'
|
||||||
|
title = 'The jungle'
|
||||||
|
theme = 'PaperMod'
|
||||||
|
|
||||||
|
[[menu.main]]
|
||||||
|
identifier = "doc"
|
||||||
|
name = "Docs"
|
||||||
|
url = "/doc/"
|
||||||
|
weight = 10
|
||||||
|
|
||||||
|
[[menu.main]]
|
||||||
|
identifier = "grafana"
|
||||||
|
name = "Grafana"
|
||||||
|
url = "/grafana/"
|
||||||
|
weight = 20
|
||||||
|
|
||||||
|
[[menu.main]]
|
||||||
|
identifier = "Git"
|
||||||
|
name = "Git"
|
||||||
|
url = "/git/"
|
||||||
|
weight = 30
|
||||||
|
|
||||||
|
[[menu.main]]
|
||||||
|
identifier = "Lists"
|
||||||
|
name = "Lists"
|
||||||
|
url = "/lists/"
|
||||||
|
weight = 40
|
||||||
|
|
||||||
|
[[menu.main]]
|
||||||
|
identifier = "Paste"
|
||||||
|
name = "Paste"
|
||||||
|
url = "/paste/"
|
||||||
|
weight = 50
|
||||||
|
|
||||||
|
[[menu.main]]
|
||||||
|
identifier = "Posts"
|
||||||
|
name = "Posts"
|
||||||
|
url = "/posts/"
|
||||||
|
weight = 60
|
||||||
BIN
web/static/hut-big.jpg
Normal file
|
After Width: | Height: | Size: 226 KiB |
BIN
web/static/jungle.jpg
Normal file
|
After Width: | Height: | Size: 325 KiB |
BIN
web/static/nodes.jpg
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
web/static/rainforest.jpg
Normal file
|
After Width: | Height: | Size: 87 KiB |
50
web/themes/PaperMod/.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: "[BUG]"
|
||||||
|
labels: bug
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
## READ BEFORE OPENING ISSUES
|
||||||
|
|
||||||
|
Please fill the template below
|
||||||
|
- **DO NOT** ask for instructions.
|
||||||
|
- Use Discussions section if you need help
|
||||||
|
- See project wiki https://github.com/adityatelange/hugo-PaperMod/wiki
|
||||||
|
- Read FAQs section https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs
|
||||||
|
- Search for previous issues/ pull requests
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
<!-- A clear and concise description of what the bug is. -->
|
||||||
|
|
||||||
|
- Device/Os: [e.g. Android 10]
|
||||||
|
- Type: [e.g. Desktop/Mobile]
|
||||||
|
- Browser and version [e.g. Chrome 86.0]:
|
||||||
|
- Hugo Version [ >=0.97.1 expected]:
|
||||||
|
- Theme Version [e.g. v4.0, master, or commit-id ]:
|
||||||
|
|
||||||
|
**Steps to reproduce the behavior:**
|
||||||
|
<!--
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
-->
|
||||||
|
|
||||||
|
**Expected behavior**:
|
||||||
|
<!-- A clear and concise description of what you expected to happen. -->
|
||||||
|
|
||||||
|
**Repo/Source where this issue can be reproduced**:
|
||||||
|
<!-- Please link source code of website where the said issue can be reproduced -->
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
<!-- If applicable, add screenshots to help explain your problem. -->
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
<!--Add any other context about the problem here. -->
|
||||||
5
web/themes/PaperMod/.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: PaperMod Discussions
|
||||||
|
url: https://github.com/adityatelange/hugo-PaperMod/discussions
|
||||||
|
about: Please ask and answer questions/doubts here, do not open an issue for questions.
|
||||||
7
web/themes/PaperMod/.github/ISSUE_TEMPLATE/new-blank-issue.md
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
name: New Blank Issue
|
||||||
|
about: Anything other than bug report
|
||||||
|
title: ""
|
||||||
|
labels: ""
|
||||||
|
assignees: ""
|
||||||
|
---
|
||||||
44
web/themes/PaperMod/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
## READ BEFORE OPENING A PR
|
||||||
|
|
||||||
|
Thank you for contributing to hugo-PaperMod!
|
||||||
|
Please fill out the following questions to make it easier for us to review your
|
||||||
|
changes. You do not need to check all the boxes below.
|
||||||
|
|
||||||
|
**NOTE**: PaperMod does not have any external dependencies fetched from 3rd party
|
||||||
|
CDN servers. However we do have custom Head/Footer extender templates which you can use
|
||||||
|
to add those to your website.
|
||||||
|
https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#custom-head--footer
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
**What does this PR change? What problem does it solve?**
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Describe the changes and their purpose here, as detailed as and if needed.
|
||||||
|
|
||||||
|
Please do not add 2 unrelated changes in a single PR as it is difficult to track/revert those in future.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
**Was the change discussed in an issue or in the Discussions before?**
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Link issues and relevant Discussions posts here.
|
||||||
|
|
||||||
|
If this PR resolves an issue on GitHub, use "Closes #1234" so that the issue
|
||||||
|
is closed automatically when this PR is merged.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
## PR Checklist
|
||||||
|
|
||||||
|
- [ ] This change adds/updates translations and I have used the [template present here](https://github.com/adityatelange/hugo-PaperMod/wiki/Translations#want-to-add-your-language-).
|
||||||
|
- [ ] I have enabled [maintainer edits for this PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork).
|
||||||
|
- [ ] I have verified that the code works as described/as intended.
|
||||||
|
- [ ] This change adds a Social Icon which has a permissive license to use it.
|
||||||
|
- [ ] This change **does not** include any CDN resources/links.
|
||||||
|
- [ ] This change **does not** include any unrelated scripts such as bash and python scripts.
|
||||||
|
- [ ] This change updates the overridden internal templates from HUGO's repository.
|
||||||
17
web/themes/PaperMod/.github/stale.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Number of days of inactivity before an issue becomes stale
|
||||||
|
daysUntilStale: 7
|
||||||
|
# Number of days of inactivity before a stale issue is closed
|
||||||
|
daysUntilClose: 3
|
||||||
|
# Issues with these labels will never be considered stale
|
||||||
|
exemptLabels:
|
||||||
|
- pinned
|
||||||
|
- keep
|
||||||
|
# Label to use when marking an issue as stale
|
||||||
|
staleLabel: stale
|
||||||
|
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This issue has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be closed if no further activity occurs. Thank you
|
||||||
|
for your contributions.
|
||||||
|
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||||
|
closeComment: false
|
||||||
80
web/themes/PaperMod/.github/workflows/gh-pages.yml
vendored
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
name: Deploy Hugo PaperMod Demo to Pages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths-ignore:
|
||||||
|
- "images/**"
|
||||||
|
- "LICENSE"
|
||||||
|
- "README.md"
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- exampleSite
|
||||||
|
workflow_dispatch:
|
||||||
|
# manual run
|
||||||
|
inputs:
|
||||||
|
hugoVersion:
|
||||||
|
description: "Hugo Version"
|
||||||
|
required: false
|
||||||
|
default: "0.97.1"
|
||||||
|
|
||||||
|
# Allow one concurrent deployment
|
||||||
|
concurrency:
|
||||||
|
group: "pages"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
# Default to bash
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# Build job
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
HUGO_VERSION: "0.97.1"
|
||||||
|
steps:
|
||||||
|
- name: Check version
|
||||||
|
if: ${{ github.event.inputs.hugoVersion }}
|
||||||
|
run: export HUGO_VERSION="${{ github.event.inputs.hugoVersion }}"
|
||||||
|
- name: Install Hugo CLI
|
||||||
|
run: |
|
||||||
|
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.deb \
|
||||||
|
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
ref: exampleSite
|
||||||
|
- name: Setup Pages
|
||||||
|
id: pages
|
||||||
|
uses: actions/configure-pages@v1
|
||||||
|
- name: Get Theme
|
||||||
|
run: git submodule update --init --recursive
|
||||||
|
- name: Update theme to Latest commit
|
||||||
|
run: git submodule update --remote --merge
|
||||||
|
- name: Build with Hugo
|
||||||
|
run: |
|
||||||
|
hugo \
|
||||||
|
--buildDrafts --gc --verbose \
|
||||||
|
--baseURL ${{ steps.pages.outputs.base_url }}
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-pages-artifact@v1
|
||||||
|
with:
|
||||||
|
path: ./public
|
||||||
|
# Deployment job
|
||||||
|
deploy:
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v1
|
||||||
22
web/themes/PaperMod/LICENSE
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 nanxiaobei and adityatelange
|
||||||
|
Copyright (c) 2021-2023 adityatelange
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
103
web/themes/PaperMod/README.md
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<h1 align=center>Hugo PaperMod | <a href="https://adityatelange.github.io/hugo-PaperMod/" rel="nofollow">Demo</a></h1>
|
||||||
|
|
||||||
|
<h4 align=center>☄️ Fast | ☁️ Fluent | 🌙 Smooth | 📱 Responsive</h4>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
> Hugo PaperMod is a theme based on [hugo-paper](https://github.com/nanxiaobei/hugo-paper).
|
||||||
|
> The goal of this project is to add more features and customization to the og theme.
|
||||||
|
|
||||||
|
**Documentation** can be found here: [**📚 Wiki**](https://github.com/adityatelange/hugo-PaperMod/wiki)
|
||||||
|
|
||||||
|
**ExampleSite** can be found here: [**exampleSite**](https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite). Demo is built up with [exampleSite](https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite) as source.
|
||||||
|
|
||||||
|
[](https://themes.gohugo.io/themes/hugo-papermod/)
|
||||||
|
[](https://github.com/gohugoio/hugo/releases/tag/v0.97.1)
|
||||||
|
[](https://discord.gg/ahpmTvhVmp)
|
||||||
|
[](https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE)
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<kbd><img src="https://user-images.githubusercontent.com/21258296/114303440-bfc0ae80-9aeb-11eb-8cfa-48a4bb385a6d.png" alt="Mockup image" title="Mockup"/></kbd>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features/Mods 💥
|
||||||
|
|
||||||
|
- Uses Hugo's asset generator with pipelining, fingerprinting, bundling and minification by default.
|
||||||
|
- 3 Modes:
|
||||||
|
- [Regular Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#regular-mode-default-mode)
|
||||||
|
- [Home-Info Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#home-info-mode)
|
||||||
|
- [Profile Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#profile-mode)
|
||||||
|
- Table of Content Generation (newer implementation).
|
||||||
|
- Archive of posts.
|
||||||
|
- Social Icons (home-info and profile-mode)
|
||||||
|
- Social-Media Share buttons on posts.
|
||||||
|
- Menu location indicator.
|
||||||
|
- Multilingual support. (with language selector)
|
||||||
|
- Taxonomies
|
||||||
|
- Cover image for each post (with Responsive image support).
|
||||||
|
- Light/Dark theme (automatic theme switch a/c to browser theme and theme-switch button).
|
||||||
|
- SEO Friendly.
|
||||||
|
- Multiple Author support.
|
||||||
|
- Search Page with Fuse.js
|
||||||
|
- Other Posts suggestion below a post
|
||||||
|
- Breadcrumb Navigation
|
||||||
|
- Code Block Copy buttons
|
||||||
|
- No webpack, nodejs and other dependencies are required to edit the theme.
|
||||||
|
|
||||||
|
Read Wiki For More Details => **[PaperMod - Features](https://github.com/adityatelange/hugo-PaperMod/wiki/Features)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Install/Update 📥
|
||||||
|
|
||||||
|
Read Wiki For More Details => **[PaperMod - Installation](https://github.com/adityatelange/hugo-PaperMod/wiki/Installation)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## FAQs / How To's Guide 🙋
|
||||||
|
|
||||||
|
Read Wiki For More Details => **[PaperMod-FAQs](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Social-Icons/Share-Icons 🖼️
|
||||||
|
|
||||||
|
Read Wiki For More Details => **[PaperMod-Icons](https://github.com/adityatelange/hugo-PaperMod/wiki/Icons)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Release Changelog 📃
|
||||||
|
|
||||||
|
Release ChangeLog has info about stuff added: **[Releases](https://github.com/adityatelange/hugo-PaperMod/releases)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [Pagespeed Insights (100% ?)](https://pagespeed.web.dev/report?url=https://adityatelange.github.io/hugo-PaperMod/) 👀
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Support 🫶
|
||||||
|
|
||||||
|
- Star 🌟 this repository.
|
||||||
|
- Help spread the word about PaperMod by sharing it on social media and recommending it to your friends. 🗣️
|
||||||
|
- You can also sponsor 🏅 on [Github Sponsors](https://github.com/sponsors/adityatelange) / [Ko-Fi](https://ko-fi.com/adityatelange).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Special Thanks 🌟
|
||||||
|
|
||||||
|
- [**Highlight.js**](https://github.com/highlightjs/highlight.js)
|
||||||
|
- [**Fuse.js**](https://github.com/krisk/fuse)
|
||||||
|
- [**Feather Icons**](https://github.com/feathericons/feather)
|
||||||
|
- [**Simple Icons**](https://github.com/simple-icons/simple-icons)
|
||||||
|
- **All Contributors and Supporters**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Stargazers over time 📈
|
||||||
|
|
||||||
|
<kbd>[](https://starchart.cc/adityatelange/hugo-PaperMod)</kbd>
|
||||||
11
web/themes/PaperMod/assets/css/common/404.css
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
.not-found {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 80%;
|
||||||
|
font-size: 160px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
44
web/themes/PaperMod/assets/css/common/archive.css
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
.archive-posts {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-year {
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-year:not(:last-of-type) {
|
||||||
|
border-bottom: 2px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-month {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-month-header {
|
||||||
|
margin: 25px 0;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-month:not(:last-of-type) {
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-entry {
|
||||||
|
position: relative;
|
||||||
|
padding: 5px;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-entry-title {
|
||||||
|
margin: 5px 0;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-count,
|
||||||
|
.archive-meta {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
60
web/themes/PaperMod/assets/css/common/footer.css
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
.footer,
|
||||||
|
.top-link {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
max-width: calc(var(--main-width) + var(--gap) * 2);
|
||||||
|
margin: auto;
|
||||||
|
padding: calc((var(--footer-height) - var(--gap)) / 2) var(--gap);
|
||||||
|
text-align: center;
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer span {
|
||||||
|
margin-inline-start: 1px;
|
||||||
|
margin-inline-end: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer span:last-child {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer a {
|
||||||
|
color: inherit;
|
||||||
|
border-bottom: 1px solid var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer a:hover {
|
||||||
|
border-bottom: 1px solid var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-link {
|
||||||
|
visibility: hidden;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 60px;
|
||||||
|
right: 30px;
|
||||||
|
z-index: 99;
|
||||||
|
background: var(--tertiary);
|
||||||
|
width: 42px;
|
||||||
|
height: 42px;
|
||||||
|
padding: 12px;
|
||||||
|
border-radius: 64px;
|
||||||
|
transition: visibility 0.5s, opacity 0.8s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-link,
|
||||||
|
.top-link svg {
|
||||||
|
filter: drop-shadow(0px 0px 0px var(--theme));
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer a:hover,
|
||||||
|
.top-link:hover {
|
||||||
|
color: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-link:focus,
|
||||||
|
#theme-toggle:focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
93
web/themes/PaperMod/assets/css/common/header.css
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
.nav {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
max-width: calc(var(--nav-width) + var(--gap) * 2);
|
||||||
|
margin-inline-start: auto;
|
||||||
|
margin-inline-end: auto;
|
||||||
|
line-height: var(--header-height);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav a {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo,
|
||||||
|
#menu {
|
||||||
|
display: flex;
|
||||||
|
margin: auto var(--gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
flex-wrap: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo a {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo a img, .logo a svg {
|
||||||
|
display: inline;
|
||||||
|
vertical-align: middle;
|
||||||
|
pointer-events: none;
|
||||||
|
transform: translate(0, -10%);
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-inline-end: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button#theme-toggle {
|
||||||
|
font-size: 26px;
|
||||||
|
margin: auto 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.dark #moon {
|
||||||
|
vertical-align: middle;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:not(.dark) #sun {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu {
|
||||||
|
list-style: none;
|
||||||
|
word-break: keep-all;
|
||||||
|
overflow-x: auto;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu li + li {
|
||||||
|
margin-inline-start: var(--gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu a {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu .active {
|
||||||
|
font-weight: 500;
|
||||||
|
border-bottom: 2px solid currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-switch li,
|
||||||
|
.lang-switch ul,
|
||||||
|
.logo-switches {
|
||||||
|
display: inline-flex;
|
||||||
|
margin: auto 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-switch {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lang-switch a {
|
||||||
|
margin: auto 3px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-switches {
|
||||||
|
flex-wrap: inherit;
|
||||||
|
}
|
||||||
68
web/themes/PaperMod/assets/css/common/main.css
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
.main {
|
||||||
|
position: relative;
|
||||||
|
min-height: calc(100vh - var(--header-height) - var(--footer-height));
|
||||||
|
max-width: calc(var(--main-width) + var(--gap) * 2);
|
||||||
|
margin: auto;
|
||||||
|
padding: var(--gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header h1 {
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination a {
|
||||||
|
color: var(--theme);
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 36px;
|
||||||
|
background: var(--primary);
|
||||||
|
border-radius: calc(36px / 2);
|
||||||
|
padding: 0 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination .next {
|
||||||
|
margin-inline-start: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-icons {
|
||||||
|
padding: 12px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-icons a:not(:last-of-type) {
|
||||||
|
margin-inline-end: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-icons a svg {
|
||||||
|
height: 26px;
|
||||||
|
width: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.highlight,
|
||||||
|
pre {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copy-code {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 4px;
|
||||||
|
right: 4px;
|
||||||
|
color: rgba(255, 255, 255, 0.8);
|
||||||
|
background: rgba(78, 78, 78, 0.8);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 0 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.highlight:hover .copy-code,
|
||||||
|
pre:hover .copy-code {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
104
web/themes/PaperMod/assets/css/common/post-entry.css
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
.first-entry {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 320px;
|
||||||
|
margin: var(--gap) 0 calc(var(--gap) * 2) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-header {
|
||||||
|
overflow: hidden;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-header h1 {
|
||||||
|
font-size: 34px;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-content {
|
||||||
|
margin: 14px 0;
|
||||||
|
font-size: 16px;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first-entry .entry-footer {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-info .entry-content {
|
||||||
|
-webkit-line-clamp: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-entry {
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: var(--gap);
|
||||||
|
padding: var(--gap);
|
||||||
|
background: var(--entry);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
transition: transform 0.1s;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-entry:active {
|
||||||
|
transform: scale(0.96);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-entry .entry-cover {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-header h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-content {
|
||||||
|
margin: 8px 0;
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.6;
|
||||||
|
overflow: hidden;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-footer {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-link {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-cover,
|
||||||
|
.entry-isdraft {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-cover {
|
||||||
|
margin-bottom: var(--gap);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-cover img {
|
||||||
|
border-radius: var(--radius);
|
||||||
|
pointer-events: none;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-cover a {
|
||||||
|
color: var(--secondary);
|
||||||
|
box-shadow: 0 1px 0 var(--primary);
|
||||||
|
}
|
||||||
402
web/themes/PaperMod/assets/css/common/post-single.css
Normal file
@@ -0,0 +1,402 @@
|
|||||||
|
.page-header,
|
||||||
|
.post-header {
|
||||||
|
margin: 24px auto var(--content-gap) auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-title {
|
||||||
|
margin-bottom: 2px;
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-description {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-meta,
|
||||||
|
.breadcrumbs {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-meta .i18n_list li {
|
||||||
|
display: inline-flex;
|
||||||
|
list-style: none;
|
||||||
|
margin: auto 3px;
|
||||||
|
box-shadow: 0 1px 0 var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs a {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content {
|
||||||
|
color: var(--content);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content h3,
|
||||||
|
.post-content h4,
|
||||||
|
.post-content h5,
|
||||||
|
.post-content h6 {
|
||||||
|
margin: 24px 0 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content h1 {
|
||||||
|
margin: 40px auto 32px;
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content h2 {
|
||||||
|
margin: 32px auto 24px;
|
||||||
|
font-size: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content h3 {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content h5 {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content h6 {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content a,
|
||||||
|
.toc a:hover {
|
||||||
|
box-shadow: 0 1px 0;
|
||||||
|
box-decoration-break: clone;
|
||||||
|
-webkit-box-decoration-break: clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content a code {
|
||||||
|
margin: auto 0;
|
||||||
|
border-radius: 0;
|
||||||
|
box-shadow: 0 -1px 0 var(--primary) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content del {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content dl,
|
||||||
|
.post-content ol,
|
||||||
|
.post-content p,
|
||||||
|
.post-content figure,
|
||||||
|
.post-content ul {
|
||||||
|
margin-bottom: var(--content-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content ol,
|
||||||
|
.post-content ul {
|
||||||
|
padding-inline-start: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content li {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content li p {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content dl {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content dt {
|
||||||
|
width: 25%;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content dd {
|
||||||
|
width: 75%;
|
||||||
|
margin-inline-start: 0;
|
||||||
|
padding-inline-start: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content dd ~ dd,
|
||||||
|
.post-content dt ~ dt {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content table {
|
||||||
|
margin-bottom: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content table th,
|
||||||
|
.post-content table:not(.highlighttable, .highlight table, .gist .highlight) td {
|
||||||
|
min-width: 80px;
|
||||||
|
padding: 12px 8px;
|
||||||
|
line-height: 1.5;
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content table th {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content table:not(.highlighttable) td code:only-child {
|
||||||
|
margin: auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content .highlight table {
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content .highlight:not(table) {
|
||||||
|
margin: 10px auto;
|
||||||
|
background: var(--hljs-bg) !important;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content li > .highlight {
|
||||||
|
margin-inline-end: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content ul pre {
|
||||||
|
margin-inline-start: calc(var(--gap) * -2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content .highlight pre {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content .highlighttable {
|
||||||
|
table-layout: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content .highlighttable td:first-child {
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content .highlighttable td .linenodiv {
|
||||||
|
padding-inline-end: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content .highlighttable td .highlight,
|
||||||
|
.post-content .highlighttable td .linenodiv pre {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content code {
|
||||||
|
margin: auto 4px;
|
||||||
|
padding: 4px 6px;
|
||||||
|
font-size: 0.78em;
|
||||||
|
line-height: 1.5;
|
||||||
|
background: var(--code-bg);
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content pre code {
|
||||||
|
display: block;
|
||||||
|
margin: auto 0;
|
||||||
|
padding: 10px;
|
||||||
|
color: rgb(213, 213, 214);
|
||||||
|
background: var(--hljs-bg) !important;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
overflow-x: auto;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content blockquote {
|
||||||
|
margin: 20px 0;
|
||||||
|
padding: 0 14px;
|
||||||
|
border-inline-start: 3px solid var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content hr {
|
||||||
|
margin: 30px 0;
|
||||||
|
height: 2px;
|
||||||
|
background: var(--tertiary);
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content iframe {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content img {
|
||||||
|
border-radius: 4px;
|
||||||
|
margin: 1rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content img[src*="#center"] {
|
||||||
|
margin: 1rem auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content figure.align-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content figure > figcaption {
|
||||||
|
color: var(--primary);
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 8px 0 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content figure > figcaption > p {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc {
|
||||||
|
margin: 0 2px 40px 2px;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
background: var(--code-bg);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .toc {
|
||||||
|
background: var(--entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc details summary {
|
||||||
|
cursor: zoom-in;
|
||||||
|
margin-inline-start: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc details[open] summary {
|
||||||
|
cursor: zoom-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc .details {
|
||||||
|
display: inline;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc .inner {
|
||||||
|
margin: 0 20px;
|
||||||
|
padding: 10px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc li ul {
|
||||||
|
margin-inline-start: var(--gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc summary:focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-footer {
|
||||||
|
margin-top: 56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags li {
|
||||||
|
display: inline-block;
|
||||||
|
margin-inline-end: 3px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags a,
|
||||||
|
.share-buttons,
|
||||||
|
.paginav {
|
||||||
|
border-radius: var(--radius);
|
||||||
|
background: var(--code-bg);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags a {
|
||||||
|
display: block;
|
||||||
|
padding-inline-start: 14px;
|
||||||
|
padding-inline-end: 14px;
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 34px;
|
||||||
|
background: var(--code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-tags a:hover,
|
||||||
|
.paginav a:hover {
|
||||||
|
background: var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.share-buttons {
|
||||||
|
margin: 14px 0;
|
||||||
|
padding-inline-start: var(--radius);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.share-buttons a {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.share-buttons a:not(:last-of-type) {
|
||||||
|
margin-inline-end: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1:hover .anchor,
|
||||||
|
h2:hover .anchor,
|
||||||
|
h3:hover .anchor,
|
||||||
|
h4:hover .anchor,
|
||||||
|
h5:hover .anchor,
|
||||||
|
h6:hover .anchor {
|
||||||
|
display: inline-flex;
|
||||||
|
color: var(--secondary);
|
||||||
|
margin-inline-start: 8px;
|
||||||
|
font-weight: 500;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav {
|
||||||
|
margin: 10px 0;
|
||||||
|
display: flex;
|
||||||
|
line-height: 30px;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav a {
|
||||||
|
padding-inline-start: 14px;
|
||||||
|
padding-inline-end: 14px;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav .title {
|
||||||
|
letter-spacing: 1px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: small;
|
||||||
|
color: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav .prev,
|
||||||
|
.paginav .next {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav span:hover:not(.title) {
|
||||||
|
box-shadow: 0 1px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginav .next {
|
||||||
|
margin-inline-start: auto;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .paginav .next {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1>a>svg {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.in-text {
|
||||||
|
display: inline;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
42
web/themes/PaperMod/assets/css/common/profile-mode.css
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
.buttons,
|
||||||
|
.main .profile {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main .profile {
|
||||||
|
align-items: center;
|
||||||
|
min-height: calc(100vh - var(--header-height) - var(--footer-height) - (var(--gap) * 2));
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile .profile_inner h1 {
|
||||||
|
padding: 12px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile img {
|
||||||
|
display: inline-table;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttons {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
max-width: 400px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
background: var(--tertiary);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
margin: 8px;
|
||||||
|
padding: 6px;
|
||||||
|
transition: transform 0.1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-inner {
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:active {
|
||||||
|
transform: scale(0.96);
|
||||||
|
}
|
||||||
45
web/themes/PaperMod/assets/css/common/search.css
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
#searchbox input {
|
||||||
|
padding: 4px 10px;
|
||||||
|
width: 100%;
|
||||||
|
color: var(--primary);
|
||||||
|
font-weight: bold;
|
||||||
|
border: 2px solid var(--tertiary);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchbox input:focus {
|
||||||
|
border-color: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchResults li {
|
||||||
|
list-style: none;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px 0;
|
||||||
|
position: relative;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchResults {
|
||||||
|
margin: 10px 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchResults li:active {
|
||||||
|
transition: transform 0.1s;
|
||||||
|
transform: scale(0.98);
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchResults a {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchResults .focus {
|
||||||
|
transform: scale(0.98);
|
||||||
|
border: 2px solid var(--tertiary);
|
||||||
|
}
|
||||||
18
web/themes/PaperMod/assets/css/common/terms.css
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
.terms-tags li {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 10px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.terms-tags a {
|
||||||
|
display: block;
|
||||||
|
padding: 3px 10px;
|
||||||
|
background: var(--tertiary);
|
||||||
|
border-radius: 6px;
|
||||||
|
transition: transform 0.1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.terms-tags a:active {
|
||||||
|
background: var(--tertiary);
|
||||||
|
transform: scale(0.96);
|
||||||
|
}
|
||||||
6
web/themes/PaperMod/assets/css/core/license.css
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
PaperMod v7
|
||||||
|
License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE
|
||||||
|
Copyright (c) 2020 nanxiaobei and adityatelange
|
||||||
|
Copyright (c) 2021-2023 adityatelange
|
||||||
|
*/
|
||||||
116
web/themes/PaperMod/assets/css/core/reset.css
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
*,
|
||||||
|
::after,
|
||||||
|
::before {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
a,
|
||||||
|
button,
|
||||||
|
body,
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
color: var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
|
font-size: 18px;
|
||||||
|
line-height: 1.6;
|
||||||
|
word-break: break-word;
|
||||||
|
background: var(--theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
main,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
table {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6,
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
figure,
|
||||||
|
ul {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
overflow-x: auto;
|
||||||
|
word-break: keep-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
textarea {
|
||||||
|
padding: 0;
|
||||||
|
font: inherit;
|
||||||
|
background: 0 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input,
|
||||||
|
textarea {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input[type=button],
|
||||||
|
input[type=submit] {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:-webkit-autofill,
|
||||||
|
textarea:-webkit-autofill {
|
||||||
|
box-shadow: 0 0 0 50px var(--theme) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
display: block;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
38
web/themes/PaperMod/assets/css/core/theme-vars.css
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
:root {
|
||||||
|
--gap: 24px;
|
||||||
|
--content-gap: 20px;
|
||||||
|
--nav-width: 1024px;
|
||||||
|
--main-width: 720px;
|
||||||
|
--header-height: 60px;
|
||||||
|
--footer-height: 60px;
|
||||||
|
--radius: 8px;
|
||||||
|
--theme: rgb(255, 255, 255);
|
||||||
|
--entry: rgb(255, 255, 255);
|
||||||
|
--primary: rgb(30, 30, 30);
|
||||||
|
--secondary: rgb(108, 108, 108);
|
||||||
|
--tertiary: rgb(214, 214, 214);
|
||||||
|
--content: rgb(31, 31, 31);
|
||||||
|
--hljs-bg: rgb(28, 29, 33);
|
||||||
|
--code-bg: rgb(245, 245, 245);
|
||||||
|
--border: rgb(238, 238, 238);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark {
|
||||||
|
--theme: rgb(29, 30, 32);
|
||||||
|
--entry: rgb(46, 46, 51);
|
||||||
|
--primary: rgb(218, 218, 219);
|
||||||
|
--secondary: rgb(155, 156, 157);
|
||||||
|
--tertiary: rgb(65, 66, 68);
|
||||||
|
--content: rgb(196, 196, 197);
|
||||||
|
--hljs-bg: rgb(46, 46, 51);
|
||||||
|
--code-bg: rgb(55, 56, 62);
|
||||||
|
--border: rgb(51, 51, 51);
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
background: var(--code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark.list {
|
||||||
|
background: var(--theme);
|
||||||
|
}
|
||||||
49
web/themes/PaperMod/assets/css/core/zmedia.css
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
/* theme-vars */
|
||||||
|
:root {
|
||||||
|
--gap: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* profile-mode */
|
||||||
|
.profile img {
|
||||||
|
transform: scale(0.85);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* post-entry */
|
||||||
|
.first-entry {
|
||||||
|
min-height: 260px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* archive */
|
||||||
|
.archive-month {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.archive-year {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* footer */
|
||||||
|
.footer {
|
||||||
|
padding: calc((var(--footer-height) - var(--gap) - 10px) / 2) var(--gap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* footer */
|
||||||
|
@media screen and (max-width: 900px) {
|
||||||
|
.list .top-link {
|
||||||
|
transform: translateY(-5rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion) {
|
||||||
|
/* terms; profile-mode; post-single; post-entry; post-entry; search; search */
|
||||||
|
.terms-tags a:active,
|
||||||
|
.button:active,
|
||||||
|
.post-entry:active,
|
||||||
|
.top-link,
|
||||||
|
#searchResults .focus,
|
||||||
|
#searchResults li:active {
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
5
web/themes/PaperMod/assets/css/extended/blank.css
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
/*
|
||||||
|
This is just a placeholder blank stylesheet so as to support adding custom styles budled with theme's default styles
|
||||||
|
|
||||||
|
Read https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#bundling-custom-css-with-themes-assets for more info
|
||||||
|
*/
|
||||||
63
web/themes/PaperMod/assets/css/hljs/an-old-hope.min.css
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #b6b18b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-deletion,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-variable {
|
||||||
|
color: #eb3c54;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-link,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-type {
|
||||||
|
color: #e7ce56;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #ee7c2b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-addition,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol {
|
||||||
|
color: #4fb4d7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-section,
|
||||||
|
.hljs-title {
|
||||||
|
color: #78bb65;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #b45ea4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #1c1d21;
|
||||||
|
color: #c0c5ce;
|
||||||
|
padding: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
63
web/themes/PaperMod/assets/css/includes/scroll-bar.css
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/* from reset */
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list:not(.dark)::-webkit-scrollbar-track {
|
||||||
|
background: var(--code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--tertiary);
|
||||||
|
border: 5px solid var(--theme);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.list:not(.dark)::-webkit-scrollbar-thumb {
|
||||||
|
border: 5px solid var(--code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: var(--secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar:not(.highlighttable, .highlight table, .gist .highlight) {
|
||||||
|
background: var(--theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* from post-single */
|
||||||
|
.post-content .highlighttable td .highlight pre code::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content :not(table) ::-webkit-scrollbar-thumb {
|
||||||
|
border: 2px solid var(--hljs-bg);
|
||||||
|
background: rgb(113, 113, 117);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content :not(table) ::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: rgb(163, 163, 165);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gist table::-webkit-scrollbar-thumb {
|
||||||
|
border: 2px solid rgb(255, 255, 255);
|
||||||
|
background: rgb(173, 173, 173);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gist table::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: rgb(112, 112, 112);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content table::-webkit-scrollbar-thumb {
|
||||||
|
border-width: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* from zmedia */
|
||||||
|
@media screen and (min-width: 768px) {
|
||||||
|
|
||||||
|
/* reset */
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 19px;
|
||||||
|
height: 11px;
|
||||||
|
}
|
||||||
|
}
|
||||||
147
web/themes/PaperMod/assets/js/fastsearch.js
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
import * as params from '@params';
|
||||||
|
|
||||||
|
let fuse; // holds our search engine
|
||||||
|
let resList = document.getElementById('searchResults');
|
||||||
|
let sInput = document.getElementById('searchInput');
|
||||||
|
let first, last, current_elem = null
|
||||||
|
let resultsAvailable = false;
|
||||||
|
|
||||||
|
// load our search index
|
||||||
|
window.onload = function () {
|
||||||
|
let xhr = new XMLHttpRequest();
|
||||||
|
xhr.onreadystatechange = function () {
|
||||||
|
if (xhr.readyState === 4) {
|
||||||
|
if (xhr.status === 200) {
|
||||||
|
let data = JSON.parse(xhr.responseText);
|
||||||
|
if (data) {
|
||||||
|
// fuse.js options; check fuse.js website for details
|
||||||
|
let options = {
|
||||||
|
distance: 100,
|
||||||
|
threshold: 0.4,
|
||||||
|
ignoreLocation: true,
|
||||||
|
keys: [
|
||||||
|
'title',
|
||||||
|
'permalink',
|
||||||
|
'summary',
|
||||||
|
'content'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
if (params.fuseOpts) {
|
||||||
|
options = {
|
||||||
|
isCaseSensitive: params.fuseOpts.iscasesensitive ?? false,
|
||||||
|
includeScore: params.fuseOpts.includescore ?? false,
|
||||||
|
includeMatches: params.fuseOpts.includematches ?? false,
|
||||||
|
minMatchCharLength: params.fuseOpts.minmatchcharlength ?? 1,
|
||||||
|
shouldSort: params.fuseOpts.shouldsort ?? true,
|
||||||
|
findAllMatches: params.fuseOpts.findallmatches ?? false,
|
||||||
|
keys: params.fuseOpts.keys ?? ['title', 'permalink', 'summary', 'content'],
|
||||||
|
location: params.fuseOpts.location ?? 0,
|
||||||
|
threshold: params.fuseOpts.threshold ?? 0.4,
|
||||||
|
distance: params.fuseOpts.distance ?? 100,
|
||||||
|
ignoreLocation: params.fuseOpts.ignorelocation ?? true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fuse = new Fuse(data, options); // build the index from the json file
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(xhr.responseText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
xhr.open('GET', "../index.json");
|
||||||
|
xhr.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
function activeToggle(ae) {
|
||||||
|
document.querySelectorAll('.focus').forEach(function (element) {
|
||||||
|
// rm focus class
|
||||||
|
element.classList.remove("focus")
|
||||||
|
});
|
||||||
|
if (ae) {
|
||||||
|
ae.focus()
|
||||||
|
document.activeElement = current_elem = ae;
|
||||||
|
ae.parentElement.classList.add("focus")
|
||||||
|
} else {
|
||||||
|
document.activeElement.parentElement.classList.add("focus")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function reset() {
|
||||||
|
resultsAvailable = false;
|
||||||
|
resList.innerHTML = sInput.value = ''; // clear inputbox and searchResults
|
||||||
|
sInput.focus(); // shift focus to input box
|
||||||
|
}
|
||||||
|
|
||||||
|
// execute search as each character is typed
|
||||||
|
sInput.onkeyup = function (e) {
|
||||||
|
// run a search query (for "term") every time a letter is typed
|
||||||
|
// in the search box
|
||||||
|
if (fuse) {
|
||||||
|
const results = fuse.search(this.value.trim()); // the actual query being run using fuse.js
|
||||||
|
if (results.length !== 0) {
|
||||||
|
// build our html if result exists
|
||||||
|
let resultSet = ''; // our results bucket
|
||||||
|
|
||||||
|
for (let item in results) {
|
||||||
|
resultSet += `<li class="post-entry"><header class="entry-header">${results[item].item.title} »</header>` +
|
||||||
|
`<a href="${results[item].item.permalink}" aria-label="${results[item].item.title}"></a></li>`
|
||||||
|
}
|
||||||
|
|
||||||
|
resList.innerHTML = resultSet;
|
||||||
|
resultsAvailable = true;
|
||||||
|
first = resList.firstChild;
|
||||||
|
last = resList.lastChild;
|
||||||
|
} else {
|
||||||
|
resultsAvailable = false;
|
||||||
|
resList.innerHTML = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sInput.addEventListener('search', function (e) {
|
||||||
|
// clicked on x
|
||||||
|
if (!this.value) reset()
|
||||||
|
})
|
||||||
|
|
||||||
|
// kb bindings
|
||||||
|
document.onkeydown = function (e) {
|
||||||
|
let key = e.key;
|
||||||
|
let ae = document.activeElement;
|
||||||
|
|
||||||
|
let inbox = document.getElementById("searchbox").contains(ae)
|
||||||
|
|
||||||
|
if (ae === sInput) {
|
||||||
|
let elements = document.getElementsByClassName('focus');
|
||||||
|
while (elements.length > 0) {
|
||||||
|
elements[0].classList.remove('focus');
|
||||||
|
}
|
||||||
|
} else if (current_elem) ae = current_elem;
|
||||||
|
|
||||||
|
if (key === "Escape") {
|
||||||
|
reset()
|
||||||
|
} else if (!resultsAvailable || !inbox) {
|
||||||
|
return
|
||||||
|
} else if (key === "ArrowDown") {
|
||||||
|
e.preventDefault();
|
||||||
|
if (ae == sInput) {
|
||||||
|
// if the currently focused element is the search input, focus the <a> of first <li>
|
||||||
|
activeToggle(resList.firstChild.lastChild);
|
||||||
|
} else if (ae.parentElement != last) {
|
||||||
|
// if the currently focused element's parent is last, do nothing
|
||||||
|
// otherwise select the next search result
|
||||||
|
activeToggle(ae.parentElement.nextSibling.lastChild);
|
||||||
|
}
|
||||||
|
} else if (key === "ArrowUp") {
|
||||||
|
e.preventDefault();
|
||||||
|
if (ae.parentElement == first) {
|
||||||
|
// if the currently focused element is first item, go to input box
|
||||||
|
activeToggle(sInput);
|
||||||
|
} else if (ae != sInput) {
|
||||||
|
// if the currently focused element is input box, do nothing
|
||||||
|
// otherwise select the previous search result
|
||||||
|
activeToggle(ae.parentElement.previousSibling.lastChild);
|
||||||
|
}
|
||||||
|
} else if (key === "ArrowRight") {
|
||||||
|
ae.click(); // click on active link
|
||||||
|
}
|
||||||
|
}
|
||||||
9
web/themes/PaperMod/assets/js/fuse.basic.min.js
vendored
Normal file
44
web/themes/PaperMod/assets/js/highlight.min.js
vendored
Normal file
6
web/themes/PaperMod/assets/js/license.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
PaperMod v7
|
||||||
|
License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE
|
||||||
|
Copyright (c) 2020 nanxiaobei and adityatelange
|
||||||
|
Copyright (c) 2021-2023 adityatelange
|
||||||
|
*/
|
||||||
3
web/themes/PaperMod/go.mod
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
module github.com/adityatelange/hugo-PaperMod
|
||||||
|
|
||||||
|
go 1.12
|
||||||
28
web/themes/PaperMod/i18n/ar.yaml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "السابق"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "التالي"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "دقيقة واحدة"
|
||||||
|
two: "دقيقتان"
|
||||||
|
few: "بضع ثوان"
|
||||||
|
zero: "الآن"
|
||||||
|
other: "دقائق {{ .Count }}"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "فهرس المحتوى"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "ترجمات أخرى"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "الصفحة الرئيسية"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "تم النسخ!"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "نسخ الكود"
|
||||||
39
web/themes/PaperMod/i18n/be.yaml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Папярэдняя"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Наступная"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
zero: "0 хвілін"
|
||||||
|
one: "1 хвіліна"
|
||||||
|
few: "{{ .Count }} хвіліны"
|
||||||
|
many: "{{ .Count }} хвілін"
|
||||||
|
other: "{{ .Count }} хвілін"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
zero: "няма слоў"
|
||||||
|
one: "1 слова"
|
||||||
|
few: "{{ .Count }} слова"
|
||||||
|
many: "{{ .Count }} слоў"
|
||||||
|
other: "{{ .Count }} слова"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Змест"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Пераклады"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Галоўная"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Рэдагаваць"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "капіяваць"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "скапіявана!"
|
||||||
16
web/themes/PaperMod/i18n/bg.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Предишна страница"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Следваща страница"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 мин"
|
||||||
|
other: "{{ .Count }} мин"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Съдържание"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Преводи"
|
||||||
33
web/themes/PaperMod/i18n/bn.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "পূর্ববর্তী"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "পরবর্তী"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "১ মিনিট"
|
||||||
|
other: "{{ .Count }} মিনিট"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "১ টি শব্দ"
|
||||||
|
other: "{{ .Count }} টি শব্দ"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "সূচিপত্র"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "অনুবাদসমূহ"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "হোম"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "সম্পাদনা করুন"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "কপি করুন"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "কপি হয়েছে!"
|
||||||
19
web/themes/PaperMod/i18n/ca.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Pàgina anterior"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Pàgina següent"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Taula de Continguts"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traduccions"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Inici"
|
||||||
25
web/themes/PaperMod/i18n/ckb.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "پەڕەی پێشتر"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "پەڕەی دواتر"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 خولەک"
|
||||||
|
other: "{{ .Count }} خولەک"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "پێڕست"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "وەرگێڕانەکان"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "ماڵەوە"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "لەبەری بگرەوە"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "لەبەر گیرایەوە!"
|
||||||
28
web/themes/PaperMod/i18n/da.yaml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Forrige Side"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Næste Side"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Indholdsfortegnelse"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Oversættelser"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Start"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Rediger"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopier"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "kopieret!"
|
||||||
33
web/themes/PaperMod/i18n/de.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Vorherige"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Nächste"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 Minute"
|
||||||
|
other: "{{ .Count }} Minuten"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "Wort"
|
||||||
|
other: "{{ .Count }} Wörter"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Inhaltsverzeichnis"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Übersetzungen"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Home"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Bearbeiten"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Kopieren"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Kopiert!"
|
||||||
33
web/themes/PaperMod/i18n/el.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Προηγούμενο"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Επόμενο"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 λεπτό"
|
||||||
|
other: "{{ .Count }} λεπτά"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "λέξη"
|
||||||
|
other: "{{ .Count }} λέξεις"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Πίνακας Περιεχομένων"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Μεταφράσεις"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Αρχική"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Επεξεργασία"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "αντιγραφή"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "αντιγράφηκε!"
|
||||||
33
web/themes/PaperMod/i18n/en.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Prev"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Next"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "word"
|
||||||
|
other: "{{ .Count }} words"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Table of Contents"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Translations"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Home"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Edit"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copy"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copied!"
|
||||||
25
web/themes/PaperMod/i18n/eo.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "antaŭa paĝo"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "sekva paĝo"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Enhavo"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "tradukoj"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "ĉefpaĝo"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopii"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "kopiite!"
|
||||||
33
web/themes/PaperMod/i18n/es.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Anterior"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Siguiente"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "palabra"
|
||||||
|
other: "{{ .Count }} palabras"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Tabla de Contenidos"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traducciones"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Inicio"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Editar"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copiar"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "¡copiado!"
|
||||||
28
web/themes/PaperMod/i18n/fa.yaml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "صفحه قبلی"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "صفحه بعدی"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "۱ دقیقه"
|
||||||
|
other: "{{ .Count }} دقیقه"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "فهرست مطالب"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "ترجمه ها"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "خانه"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "ویرایش"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "کپی"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "کپی شد!"
|
||||||
33
web/themes/PaperMod/i18n/fr.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Précédent"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Suivant"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "mot"
|
||||||
|
other: "{{ .Count }} mots"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Table des matières"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traductions"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Accueil"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Modifier"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Copier"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Copié !"
|
||||||
33
web/themes/PaperMod/i18n/he.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "קודם"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "הבא"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "דקה אחת"
|
||||||
|
other: "דקות {{ .Count }}"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "word"
|
||||||
|
other: "מילים {{ .Count }} "
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "תוכן העניינים"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "תרגומים"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "בית"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "ערוך"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "העתק"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "!הועתק"
|
||||||
19
web/themes/PaperMod/i18n/hi.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "पिछला"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "अगला"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "एक मिनट"
|
||||||
|
other: "{{ .Count }} मिनट"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "सुधारें"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "विषय - सूची"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "अनुवाद"
|
||||||
33
web/themes/PaperMod/i18n/hr.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Prethodna stranica"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Sljedeća stranica"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 minuta"
|
||||||
|
other: "{{ .Count }} minute"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "riječ"
|
||||||
|
other: "{{ .Count }} riječi"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Tablica Sadržaja"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Prijevodi"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Početna stranica"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Promjeni"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopiraj"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "kopirano!"
|
||||||
16
web/themes/PaperMod/i18n/hu.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Előző oldal"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Következő oldal"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 perc"
|
||||||
|
other: "{{ .Count }} perc"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Tartalomjegyzék"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Fordítások"
|
||||||
33
web/themes/PaperMod/i18n/id.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Sebelumnya"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Selanjutnya"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 menit"
|
||||||
|
other: "{{ .Count }} menit"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "kata"
|
||||||
|
other: "{{ .Count }} kata"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Daftar isi"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Terjemahan"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Beranda"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Sunting"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "salin"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "disalin!"
|
||||||
33
web/themes/PaperMod/i18n/it.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Precedente"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Successivo"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 minuto"
|
||||||
|
other: "{{ .Count }} minuti"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "parola"
|
||||||
|
other: "{{ .Count }} parole"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Indice contenuti"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traduzioni"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Home"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Modifica"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copia"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copiato!"
|
||||||
33
web/themes/PaperMod/i18n/ja.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "前へ"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "次へ"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 分"
|
||||||
|
other: "{{ .Count }} 分"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one: "文字"
|
||||||
|
other: "{{ .Count }} 文字"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "目次"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "言語"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "ホーム"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "編集"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "コピー"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "コピーされました!"
|
||||||
33
web/themes/PaperMod/i18n/ko.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "이전 페이지"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "다음 페이지"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 분"
|
||||||
|
other: "{{ .Count }} 분"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "단어"
|
||||||
|
other: "{{ .Count }} 단어"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "목차"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "번역"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "홈"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "편집"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "복사"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "복사 완료!"
|
||||||
25
web/themes/PaperMod/i18n/ku.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Rûpela Paş"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Rûpela Pêş"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 xulek"
|
||||||
|
other: "{{ .Count }} xulek"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Pêrist"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Wergeran"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Xanî"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Jê bigire"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Hat jêgirtin!"
|
||||||
25
web/themes/PaperMod/i18n/mn.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Ѳмнѳх"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Дараах"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 МИН"
|
||||||
|
other: "{{ .Count }} МИН"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Агуулга"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Орчуулга"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Нүүр"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "хуулах"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "хуулсан!"
|
||||||
28
web/themes/PaperMod/i18n/ms.yaml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Halaman Sebelumnya"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Halaman Seterusnya"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 minit"
|
||||||
|
other: "{{ .Count }} minit"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Isi Kandungan"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Terjemahan"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Home"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Sunting"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Salin"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Disalin!"
|
||||||
33
web/themes/PaperMod/i18n/nl.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Vorige"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Volgende"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "woord"
|
||||||
|
other: "{{ .Count }} woorden"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Inhoudsopgave"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Vertalingen"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Startpagina"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Bewerk"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopieer"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "gekopieerd!"
|
||||||
33
web/themes/PaperMod/i18n/pl.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Poprzednia"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Następna"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "słowo"
|
||||||
|
other: "{{ .Count }} słów"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Spis treści"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Tłumaczenia"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Strona Główna"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Edytuj"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Kopiuj"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Skopiowano!"
|
||||||
33
web/themes/PaperMod/i18n/pt.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Página Anterior"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Próxima Página"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 minuto"
|
||||||
|
other: "{{ .Count }} minutos"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "palavra"
|
||||||
|
other: "{{ .Count }} palavras"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Conteúdo"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Traduções"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Início"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Editar"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "copiar"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "copiado!"
|
||||||
39
web/themes/PaperMod/i18n/ru.yaml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Предыдущая"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Следующая"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
zero: "0 минут"
|
||||||
|
one: "1 минута"
|
||||||
|
few: "{{ .Count }} минуты"
|
||||||
|
many: "{{ .Count }} минут"
|
||||||
|
other: "{{ .Count }} минута"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
zero: "0 слов"
|
||||||
|
one: "1 слово"
|
||||||
|
few: "{{ .Count }} слова"
|
||||||
|
many: "{{ .Count }} слов"
|
||||||
|
other: "{{ .Count }} слово"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Оглавление"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Переводы"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Главная"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Редактировать"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "копировать"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "скопировано!"
|
||||||
28
web/themes/PaperMod/i18n/sv.yaml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Förra Sidan"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Nästa Sida"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one: "1 min"
|
||||||
|
other: "{{ .Count }} min"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Innehållsförteckning"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Översättningar"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Hem"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Redigera"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "kopiera"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "kopierad!"
|
||||||
33
web/themes/PaperMod/i18n/tr.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Önceki"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Sonraki"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 dk"
|
||||||
|
other: "{{ .Count }} dk"
|
||||||
|
|
||||||
|
- id: words
|
||||||
|
translation:
|
||||||
|
one : "kelime"
|
||||||
|
other: "{{ .Count }} kelime"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "İçindekiler"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Çeviriler"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Anasayfa"
|
||||||
|
|
||||||
|
- id: edit_post
|
||||||
|
translation: "Düzenle"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "Kopyala"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "Kopyalandı!"
|
||||||
25
web/themes/PaperMod/i18n/uk.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
- id: prev_page
|
||||||
|
translation: "Попередня"
|
||||||
|
|
||||||
|
- id: next_page
|
||||||
|
translation: "Наступна"
|
||||||
|
|
||||||
|
- id: read_time
|
||||||
|
translation:
|
||||||
|
one : "1 хвилина"
|
||||||
|
other: "{{ .Count }} хвилин"
|
||||||
|
|
||||||
|
- id: toc
|
||||||
|
translation: "Зміст"
|
||||||
|
|
||||||
|
- id: translations
|
||||||
|
translation: "Переклади"
|
||||||
|
|
||||||
|
- id: home
|
||||||
|
translation: "Головна"
|
||||||
|
|
||||||
|
- id: code_copy
|
||||||
|
translation: "копіювати"
|
||||||
|
|
||||||
|
- id: code_copied
|
||||||
|
translation: "скопійовано!"
|
||||||