Forked cosmicflow.space from cosmicpirates.space
This commit is contained in:
parent
dc31e6399c
commit
0ce84aa48e
99 changed files with 2365 additions and 1226 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
/public/
|
/public/
|
||||||
/.packages/
|
/.packages/
|
||||||
|
/.org-cache/
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
# cosmicpirates.space
|
# cosmicpirates.space
|
||||||
This is the source code of the cosmicpirates.space website
|
This is the source code of the cosmicflow website
|
||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
Currently in the cosmicpirates.space source can ge accessed on our private [Gitea](https://about.gitea.com/) server.
|
Currently in the cosmicflow.space source can ge accessed on our private [Gitea](https://about.gitea.com/) server.
|
||||||
|
|
||||||
### Step 1 : SSH into the cosmicpirates server with forward tunnel of port 3000 to your local port 3000
|
### Step 1 : SSH into the cosmicpirates server with forward tunnel of port 3000 to your local port 3000
|
||||||
ssh into the server and forward the port on which Gitea is running(in our case port 3000) into our local port 3000
|
ssh into the server and forward the port on which Gitea is running(in our case port 3000) into our local port 3000
|
||||||
|
|
||||||
```console
|
```console
|
||||||
ssh -L 3000:localhost:3000 pirate@cosmicpirates.space
|
ssh -L 3000:localhost:3000 fluid@cosmicflow.space
|
||||||
```
|
```
|
||||||
### Step 2: Open Gitea on your Browser
|
### Step 2: Open Gitea on your Browser
|
||||||
Open http://localhost:3000/ in your browser
|
Open http://localhost:3000/ in your browser
|
||||||
|
|
1051
assets/css/code.css
Normal file
1051
assets/css/code.css
Normal file
File diff suppressed because it is too large
Load diff
449
assets/css/site.css
Normal file
449
assets/css/site.css
Normal file
|
@ -0,0 +1,449 @@
|
||||||
|
/*
|
||||||
|
* Globals
|
||||||
|
*/
|
||||||
|
|
||||||
|
::root {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
html {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
max-width: 270px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row .column:not(:last-child) {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-form {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newsletter-text {
|
||||||
|
font-size: 0.65rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sm */
|
||||||
|
@media screen and (min-width: 768px) {
|
||||||
|
html {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
max-width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row .column {
|
||||||
|
display: block;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
max-width: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row .column:not(:last-child) {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video {
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-form {
|
||||||
|
width: 60%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newsletter-text {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* md */
|
||||||
|
@media screen and (min-width: 992px) {
|
||||||
|
html {
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lg */
|
||||||
|
@media screen and (min-width: 2560px) {
|
||||||
|
html {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: "Iosevka Aile Web", sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 1.3rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #eeffff;
|
||||||
|
background-color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
b {
|
||||||
|
font-weight: 800;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
padding-right: 0.75rem;
|
||||||
|
padding-left: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
font-family: "Iosevka Aile Web", sans-serif;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-top: 1.3rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
color: #ff11ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: #e9a4ee;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
color: #c11146;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: #c792ea;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
color: #c3e88d;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
/* color: #c3e88d; */
|
||||||
|
color: #82aaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
color: #82aaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.anchor {
|
||||||
|
color: #292d3e;
|
||||||
|
float: left;
|
||||||
|
padding-right: 4px;
|
||||||
|
margin-left: -23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.anchor:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover .anchor,
|
||||||
|
h3:hover .anchor,
|
||||||
|
h4:hover .anchor {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
kbd {
|
||||||
|
font-family: "JetBrains Mono", monospace;
|
||||||
|
font-weight: 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
font-family: "JetBrains Mono", monospace;
|
||||||
|
background-color: #232635;
|
||||||
|
padding: 1em;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
color: #c3e88d;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
code {
|
||||||
|
font-family: "JetBrains Mono", monospace;
|
||||||
|
font-weight: 200;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Override Bootstrap's default container.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 60rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Masthead for nav
|
||||||
|
*/
|
||||||
|
|
||||||
|
.site-masthead {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
background-color: rgba(28, 31, 38, 0.5);
|
||||||
|
border-bottom: 0.05rem solid #e17fd7;
|
||||||
|
-webkit-box-shadow: inset 0 -0.1rem 0.25rem rgba(0, 0, 0, 0.1);
|
||||||
|
box-shadow: inset 0 -0.1rem 0.25rem rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
display: block;
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Nav links */
|
||||||
|
.nav-link {
|
||||||
|
position: relative;
|
||||||
|
padding: 0rem;
|
||||||
|
font-size: 1.3rem;
|
||||||
|
margin: 0.5rem 1.25rem 0.5rem 0rem;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #cdddeb;
|
||||||
|
}
|
||||||
|
.nav-link:hover,
|
||||||
|
.nav-link:focus {
|
||||||
|
color: #fff;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active state gets a caret at the bottom */
|
||||||
|
.nav-link.active {
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-icon {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-icons {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Blog name and description
|
||||||
|
*/
|
||||||
|
|
||||||
|
.site-header {
|
||||||
|
font-family: "Iosevka Aile Web", sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
background-image: url("/img/header_bg.png");
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-title {
|
||||||
|
margin-bottom: 0;
|
||||||
|
font-size: 3rem;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #82aaff;
|
||||||
|
}
|
||||||
|
.site-description {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 40em) {
|
||||||
|
.site-description {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Site pages
|
||||||
|
*/
|
||||||
|
|
||||||
|
.site-post {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-post-title {
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
font-size: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-post-meta {
|
||||||
|
margin-bottom: 1.25rem;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-post-tags {
|
||||||
|
margin-top: 3rem;
|
||||||
|
margin-bottom: 1.25rem;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Footer
|
||||||
|
*/
|
||||||
|
|
||||||
|
.site-footer {
|
||||||
|
padding: 1.3rem 0;
|
||||||
|
margin-top: 1rem;
|
||||||
|
color: #93309f;
|
||||||
|
font-size: 1rem;
|
||||||
|
background-color: #38033a;
|
||||||
|
border-top: 0.05rem solid #c3e88d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-footer p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-footer-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video::after {
|
||||||
|
display: block;
|
||||||
|
content: "";
|
||||||
|
padding-top: 56.25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.video iframe {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
border: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta {
|
||||||
|
width: 80%;
|
||||||
|
padding: 1rem;
|
||||||
|
margin-top: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
border: 1px solid #f78c6c;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #232635;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stream-time {
|
||||||
|
width: 80%;
|
||||||
|
padding: 1rem;
|
||||||
|
margin-top: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
border: 1px solid #c792ea;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #232635;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-form {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
padding: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
border: 1px solid #c3e88d;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #232635;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-form-title {
|
||||||
|
font-family: "Iosevka Aile Web", sans-serif;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
color: #c3e88d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-form-label {
|
||||||
|
margin-top: 0.8rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-form input[type="text"] {
|
||||||
|
width: 100%;
|
||||||
|
padding: 10px 10px;
|
||||||
|
margin: 8px 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 1px solid #c3e88d;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #232635;
|
||||||
|
color: #eeffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-form input[type="submit"] {
|
||||||
|
width: 50%;
|
||||||
|
padding: 10px 10px;
|
||||||
|
margin: 8px 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 1px solid #89aaeb;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #89aaeb;
|
||||||
|
color: #232635;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newsletter-text {
|
||||||
|
}
|
382
assets/fonts/iosevka-aile/iosevka-aile.css
Normal file
382
assets/fonts/iosevka-aile/iosevka-aile.css
Normal file
|
@ -0,0 +1,382 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 100;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-thin.woff2") format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-thin.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 100;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-thinoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-thinoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 100;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-thinoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-thinoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 100;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-thinitalic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-thinitalic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 200;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-extralight.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-extralight.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 200;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-extralightoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-extralightoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 200;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-extralightoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-extralightoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 200;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-extralightitalic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-extralightitalic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 300;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-light.woff2") format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-light.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 300;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-lightoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-lightoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 300;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-lightoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-lightoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 300;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-lightitalic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-lightitalic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 400;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-regular.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-regular.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 400;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-oblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-oblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 400;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-oblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-oblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 400;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-italic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-italic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 500;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-medium.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-medium.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 500;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-mediumoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-mediumoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 500;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-mediumoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-mediumoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 500;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-mediumitalic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-mediumitalic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 600;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-semibold.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-semibold.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 600;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-semiboldoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-semiboldoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 600;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-semiboldoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-semiboldoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 600;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-semibolditalic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-semibolditalic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 700;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-bold.woff2") format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-bold.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 700;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-boldoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-boldoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 700;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-boldoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-boldoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 700;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-bolditalic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-bolditalic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 800;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-extrabold.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-extrabold.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 800;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-extraboldoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-extraboldoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 800;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-extraboldoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-extraboldoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 800;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-extrabolditalic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-extrabolditalic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 900;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-heavy.woff2") format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-heavy.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 900;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: oblique;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-heavyoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-heavyoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web Oblique";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 900;
|
||||||
|
font-stretch: normal;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-heavyoblique.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-heavyoblique.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Iosevka Aile Web";
|
||||||
|
font-display: swap;
|
||||||
|
font-weight: 900;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: italic;
|
||||||
|
src: url("/fonts/iosevka-aile/woff2/iosevka-aile-heavyitalic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("ttf/iosevka-aile-heavyitalic.ttf") format("truetype");
|
||||||
|
}
|
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-bold.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-bold.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-bolditalic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-bolditalic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-boldoblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-boldoblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabold.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabold.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabolditalic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabolditalic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extraboldoblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extraboldoblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extralight.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extralight.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightitalic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightitalic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightoblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightoblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-heavy.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-heavy.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyitalic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyitalic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyoblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyoblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-italic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-italic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-light.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-light.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-lightitalic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-lightitalic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-lightoblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-lightoblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-medium.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-medium.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumitalic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumitalic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumoblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumoblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-oblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-oblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-regular.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-regular.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-semibold.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-semibold.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-semibolditalic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-semibolditalic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-semiboldoblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-semiboldoblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-thin.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-thin.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-thinitalic.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-thinitalic.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-thinoblique.ttf
Normal file
BIN
assets/fonts/iosevka-aile/ttf/iosevka-aile-thinoblique.ttf
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-bold.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-bold.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-bolditalic.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-bolditalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-boldoblique.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-boldoblique.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-extrabold.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-extrabold.woff2
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-extralight.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-extralight.woff2
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-heavy.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-heavy.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyitalic.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyitalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyoblique.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyoblique.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-italic.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-italic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-light.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-light.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-lightitalic.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-lightitalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-lightoblique.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-lightoblique.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-medium.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-medium.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumitalic.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumitalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumoblique.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumoblique.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-oblique.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-oblique.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-regular.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-regular.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-semibold.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-semibold.woff2
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-thin.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-thin.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-thinitalic.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-thinitalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-thinoblique.woff2
Normal file
BIN
assets/fonts/iosevka-aile/woff2/iosevka-aile-thinoblique.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Bold.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Bold.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-BoldItalic.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-BoldItalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBoldItalic.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBoldItalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLight.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLight.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLightItalic.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLightItalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Italic.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Italic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Light.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Light.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-LightItalic.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-LightItalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-MediumItalic.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-MediumItalic.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Thin.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-Thin.woff2
Normal file
Binary file not shown.
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ThinItalic.woff2
Normal file
BIN
assets/fonts/jetbrains-mono/JetBrainsMono-ThinItalic.woff2
Normal file
Binary file not shown.
76
assets/fonts/jetbrains-mono/jetbrains-mono.css
Normal file
76
assets/fonts/jetbrains-mono/jetbrains-mono.css
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: "JetBrains Mono";
|
||||||
|
src: url("/fonts/jetbrains-mono/JetBrainsMono-Bold-Italic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("/fonts/jetbrains-mono/JetBrainsMono-Bold-Italic.woff") format("woff");
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: italic;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "JetBrains Mono";
|
||||||
|
src: url("/fonts/jetbrains-mono/JetBrainsMono-Bold.woff2") format("woff2"),
|
||||||
|
url("/fonts/jetbrains-mono/JetBrainsMono-Bold.woff") format("woff");
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "JetBrains Mono";
|
||||||
|
src: url("/fonts/jetbrains-mono/JetBrainsMono-ExtraBold-Italic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("/fonts/jetbrains-mono/JetBrainsMono-ExtraBold-Italic.woff")
|
||||||
|
format("woff");
|
||||||
|
font-weight: 800;
|
||||||
|
font-style: italic;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "JetBrains Mono";
|
||||||
|
src: url("/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.woff") format("woff");
|
||||||
|
font-weight: 800;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "JetBrains Mono";
|
||||||
|
src: url("/fonts/jetbrains-mono/JetBrainsMono-Italic.woff2") format("woff2"),
|
||||||
|
url("/fonts/jetbrains-mono/JetBrainsMono-Italic.woff") format("woff");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: italic;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "JetBrains Mono";
|
||||||
|
src: url("/fonts/jetbrains-mono/JetBrainsMono-Medium-Italic.woff2")
|
||||||
|
format("woff2"),
|
||||||
|
url("/fonts/jetbrains-mono/JetBrainsMono-Medium-Italic.woff") format("woff");
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: italic;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "JetBrains Mono";
|
||||||
|
src: url("/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2") format("woff2"),
|
||||||
|
url("/fonts/jetbrains-mono/JetBrainsMono-Medium.woff") format("woff");
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "JetBrains Mono";
|
||||||
|
src: url("/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2") format("woff2"),
|
||||||
|
url("/fonts/jetbrains-mono/JetBrainsMono-Regular.woff") format("woff");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
BIN
assets/pics/CCLogoColorPop1.gif
Normal file
BIN
assets/pics/CCLogoColorPop1.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 MiB |
BIN
assets/pics/header_bg.png
Normal file
BIN
assets/pics/header_bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 474 KiB |
BIN
assets/pics/sc_logo.png
Normal file
BIN
assets/pics/sc_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 440 KiB |
BIN
assets/pics/sc_logo_1.png
Normal file
BIN
assets/pics/sc_logo_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.9 MiB |
|
@ -1,7 +1,3 @@
|
||||||
#+title: About
|
|
||||||
#+created: [2024-03-02 Sat]
|
|
||||||
#+setupfile: main.setup
|
|
||||||
|
|
||||||
#+begin_center
|
#+begin_center
|
||||||
: +--------------------------------------+
|
: +--------------------------------------+
|
||||||
: | ___ _ _ |
|
: | ___ _ _ |
|
||||||
|
@ -13,12 +9,6 @@
|
||||||
: +--------------------------------------+
|
: +--------------------------------------+
|
||||||
#+end_center
|
#+end_center
|
||||||
|
|
||||||
#+name: link-list
|
My name is Dibyashanu Pati, I like Physics, Mathematics, Astronomy and Computers.
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
| [[file:index.org][Home]] | [[file:blogs/blog-index.org][Blogs]] | [[file:about.org][About]] | [[file:FAQ.org][FAQ]] | [[file:news.org][News]] | [[file:contact.org][PGP]] | [[file:links.org][Links]] |
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
|
|
||||||
|
|
||||||
We think that knowledge should be open to everyone and freely accessible.
|
|
||||||
This website will document our projects, interests and ideas.
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
#+title: Blogs List
|
|
||||||
#+created: [2024-03-01 Fri]
|
|
||||||
#+OPTIONS: num:nil ^:{} title:nil toc:nil
|
|
||||||
#+setupfile: ../main.setup
|
|
||||||
|
|
||||||
#+begin_center
|
#+begin_center
|
||||||
: +-----------------------------------------------------+
|
: +-----------------------------------------------------+
|
||||||
: |oooooooooo. oooo |
|
: |oooooooooo. oooo |
|
||||||
|
@ -17,13 +12,10 @@
|
||||||
: +-----------------------------------------------------+
|
: +-----------------------------------------------------+
|
||||||
#+end_center
|
#+end_center
|
||||||
|
|
||||||
[[../index.org][Home]]
|
|
||||||
|
|
||||||
* A list of All Blogs
|
* A list of All Blogs
|
||||||
|
|
||||||
#+name: blog-table-complete
|
|-----------+------------------+------------------|
|
||||||
|-
|
| Title | Last Modified | Created |
|
||||||
|Title|Last Modified|Created|
|
|-----------+------------------+------------------|
|
||||||
|-
|
| [[/test_blog][Test Blog]] | [2024-08-17 Sat] | [2024-08-17 Sat] |
|
||||||
|[[file:test_blog_3.org][Test Blog]]||[2024-02-05 Thu]|
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
|-
|
|
||||||
|Title|Last Modified|Created|
|
|
||||||
|-
|
|
||||||
|[[file:test_blog_3.org][Test Blog]]||[2024-02-05 Thu]|
|
|
|
@ -1,46 +0,0 @@
|
||||||
# -*- mode: org; -*-
|
|
||||||
|
|
||||||
# These are the options for blog pages
|
|
||||||
# title is automatically set to blog name
|
|
||||||
|
|
||||||
#+OPTIONS: num:nil ^:{} toc:nil
|
|
||||||
|
|
||||||
The following are the html customiation options
|
|
||||||
|
|
||||||
Setting the background color to black
|
|
||||||
#+HTML_HEAD:<style> body { background-color: #000000; color: #eeeeee;border 5px; padding 5px} </style>
|
|
||||||
#+HTML_HEAD:<style> pre { background-color: #000000; } </style>
|
|
||||||
|
|
||||||
* Margins
|
|
||||||
** p
|
|
||||||
#+HTML_HEAD:<style>
|
|
||||||
#+HTML_HEAD: p {
|
|
||||||
#+HTML_HEAD: margin-top: 20px;
|
|
||||||
#+HTML_HEAD: margin-bottom: 20px;
|
|
||||||
#+HTML_HEAD: margin-left: 30px;
|
|
||||||
#+HTML_HEAD: margin-right: 30px;
|
|
||||||
#+HTML_HEAD: }
|
|
||||||
#+HTML_HEAD:</style>
|
|
||||||
** h2
|
|
||||||
#+HTML_HEAD:<style>
|
|
||||||
#+HTML_HEAD: h2 {
|
|
||||||
#+HTML_HEAD: margin-top: 20px;
|
|
||||||
#+HTML_HEAD: margin-bottom: 20px;
|
|
||||||
#+HTML_HEAD: margin-left: 10px;
|
|
||||||
#+HTML_HEAD: margin-right: 10px;
|
|
||||||
#+HTML_HEAD: }
|
|
||||||
#+HTML_HEAD:</style>
|
|
||||||
|
|
||||||
|
|
||||||
Alligning center blocks to the center
|
|
||||||
#+HTML_HEAD:<style> .org-center {text-align: center;} </style>
|
|
||||||
|
|
||||||
Setting up tables to always be in the center
|
|
||||||
#+HTML_HEAD:<style> table { margin-left: auto; margin-right:auto; } </style>
|
|
||||||
|
|
||||||
Setting up the h2(main) heading
|
|
||||||
#+HTML_HEAD:<style> h2 {font-size: 35px; color: #a3373c;} </style>
|
|
||||||
|
|
||||||
Setting up the h3 heading
|
|
||||||
#+HTML_HEAD:<style> h3 {font-size: 30px; color: #3778a3; text-align: center;} </style>
|
|
||||||
#+HTML_HEAD:
|
|
|
@ -11,12 +11,6 @@
|
||||||
#+end_center
|
#+end_center
|
||||||
|
|
||||||
|
|
||||||
#+name: link-list
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
| [[file:index.org][Home]] | [[file:blogs/blog-index.org][Blogs]] | [[file:about.org][About]] | [[file:FAQ.org][FAQ]] | [[file:news.org][News]] | [[file:contact.org][PGP]] | [[file:links.org][Links]] |
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
|
|
||||||
|
|
||||||
* Dibyashanu Pati
|
* Dibyashanu Pati
|
||||||
#+begin_center
|
#+begin_center
|
||||||
: ┌─┐ ┌┬┐ ┌─┐ ┬ ┬
|
: ┌─┐ ┌┬┐ ┌─┐ ┬ ┬
|
||||||
|
@ -84,68 +78,3 @@ Uwr5q7YlZSsd+DyyEU6tpNO98Afjk+0=
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* Pranav Kalsi
|
|
||||||
#+begin_center
|
|
||||||
: ┌─┐ ┌┬┐ ┌─┐ ┬ ┬
|
|
||||||
: ├┤ │││ ├─┤ │ │
|
|
||||||
: └─┘ ┴ ┴ ┴ ┴ ┴ ┴─┘
|
|
||||||
|
|
||||||
: ┌─┐ ┬─┐ ┌─┐ ┌┐┌ ┌─┐ ┬ ┬ ┬┌─ ┌─┐ ┬ ┌─┐ ┬ ┌─┐ ┌─┐ ┬─┐ ┌─┐ ┌┬┐ ┌─┐ ┌┐┌ ┌┬┐ ┌─┐
|
|
||||||
: ├─┘ ├┬┘ ├─┤ │││ ├─┤ └┐┌┘ ├┴┐ ├─┤ │ └─┐ │ │└┘ ├─┘ ├┬┘ │ │ │ │ │ │││ │││ ├┤
|
|
||||||
: ┴ ┴└─ ┴ ┴ ┘└┘ ┴ ┴ └┘ ┴ ┴ ┴ ┴ ┴─┘ └─┘ ┴ └── ┴ ┴└─ └─┘ ┴ └─┘ ┘└┘ o ┴ ┴ └─┘
|
|
||||||
#+end_center
|
|
||||||
** PGP Keys
|
|
||||||
#+begin_src
|
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
||||||
|
|
||||||
mQINBGXjQi0BEADscnldocIP8mZND6lrt8RHawdIYenzT0ZrbRV6K9ZBeN7gRAtX
|
|
||||||
5zPPSpSS0p6XNPJ9Jfl1hEoY9cU3M5yGtj3ax+q+pRJddJ/mAQmqwdnrITmJdcpl
|
|
||||||
e1KQcQLStjNrlpsevgssFjEzicm5a4c4QSNSJI7uv0vjQh+tPlzQw15C1kMB+8RX
|
|
||||||
NHgB3fG+JDJx1xinnV+dyvOlsUqJpiWBM+JP0O1+/moSo4Ca6xhn2y4QP+jPr5ka
|
|
||||||
tDxVmG9iqTq4aLxWrRLQLj04LhV58fUZJTQ4gW+9/u9ue4H/H7+ZUbIUe5UTlcjC
|
|
||||||
IdgZMZq6zQWbqtpBdL7LKXvoCADpLuWg1atwSrDdVtw6kbYDoniEhOIU5zggI+tm
|
|
||||||
vF9ZeVefHYpG9itxnJSUaap99LvvD2hP5nHTfrHps+TpSZ+dy3JVgIsOyGkxlZgO
|
|
||||||
sTMsloCz86TNAbaOikGOSAQOQrIsmsIKc+1H7k2gk21XbcVMcGlf15T2K4/OcF74
|
|
||||||
TG7VtdNs4MCR3qmapz9viqDY5i3pfghf0633Nf2ga2XGV4uohJeohUyg9qXqgYwV
|
|
||||||
I5c+nnbRyijwruzBpXD3iOrUtarHwWCNdu8QuZ3PhMJnNKJcFp3NG+D7OYQgxdDs
|
|
||||||
jDyTUveBfsYcNZHnOAkl9vL6mmLqed88kqLkyvnAPf1EJ8tFFjeWYPzMKwARAQAB
|
|
||||||
tE1QcmFuYXYgS2Fsc2kgKHRoZXNlIGtleXMgd2VyZSBnZW5lcmF0ZWQgZm9yIHdl
|
|
||||||
YnNpdGUxKSA8cHJhbmF2a2Fsc2lAcHJvdG9uLm1lPokCUQQTAQgAOxYhBMp1f+d7
|
|
||||||
eHhbxJ6gtg3AlnfN1q0dBQJl40ItAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4H
|
|
||||||
AheAAAoJEA3AlnfN1q0d5gIP/RbilxvW0h2CmpjNIrB67LIdbbl6P4lttqkXLfFs
|
|
||||||
2csZnSSnDsMULYStrYzS8APWZN3oUAZcAMshAZS0dG2uGjcRcuHTyaRkhMafLKVg
|
|
||||||
zbEjNkrZocufI56S/jXSam2LzpJd7Zq9TDC3dTbgHrRdpdbkLRJdoEUMW/VshKfp
|
|
||||||
2LZdJmTRym2l5falOEPnniO3vm9VdU0kHEWJbtAmqxnXntCF6ev+Y13eK2U+w/7W
|
|
||||||
yUUaIj9y37Zzm8DtQ+C/2q0KCzrkF8jfqgQKSzQCFQuGXPviKDgT6ISlsIJ3WJWW
|
|
||||||
9OTNTB6Lp15ZlVQ1Jved39LAPnldj6zrI/fl6li0qJX3FC9anQAukxN6clLkdsrp
|
|
||||||
hdzME2QMkUol1IhSxI+0FeAbrDG7DB5SwXPc/66RlGKNsu2Dg6MLxgrdE2O2dFYl
|
|
||||||
hryrxGPhT9qvqu3gAmAr1UehVgePpFYLKcDFhY0LFDzKQAT7uRtC4krvZefoC+UN
|
|
||||||
kdKT3ncp4iFb2sINxazZrJ0C2av2/2uEnp+/BPmCMZbTLRu4CSqwRn1Lniax48m5
|
|
||||||
OIBfGh7YOXxiQ3bCkFIBznevPLhlnO51L18xG3oo0TWAg8RasuWhhtIauXLUupco
|
|
||||||
66oTvG8rp62/qfijXsErv/NuOTJYK2GjmINlyxAmnicgyg8MJe/DA0LS4Isu+Kg/
|
|
||||||
m5jPuQINBGXjQi0BEADZxSCV6vy/j4agmZPOUsxjjxKumGNHbwptJJuDLIHt7r+W
|
|
||||||
I8/L7yZREfgg2y9zXvGjt37gHI35n3D2sdOk6Rasx7dDnKsbDBXz0dn2Wla8fnpl
|
|
||||||
RyRQjYhzG+LtSy1zQtnAczdGRrKU6GGIi3zQ6rtXlQP2Ll8XNd3lEKPcN/pF+0U5
|
|
||||||
JfDwILpZNo2h+3wq8qwmtMxqyzq/nAX0zTeFtKXETpyfseUTCBJZedwaCNV0Jteb
|
|
||||||
nsmURQtpqXlbHDy75Br0ge/DQ/yoW8N88fvKPc2fLZJnPlSzP6OpkUPnA5qxNuAs
|
|
||||||
97RPSnhdLGGcbtn1EYRBmty4/XcEcCgAvrzIGiBuTS34ODOU2qGvWNJzUruilQYm
|
|
||||||
ijCvSX/3oXTwaYCY61YdnduCXYtbrufTqXLEvyYU8wrJVjsNN1XElJfiVuWJdqW/
|
|
||||||
zeJzWRFRoaRuLOqewXNWg2F0yULS4e9uv5yuZH4YUNL6QSB4YixCwnYkTrziKgUR
|
|
||||||
rL1egGK/H85NNiCL/0WVZHtNF+A3qbQ4Q+CPS6r4E7Yf6XWV8w0hO2A4PL9B4+iW
|
|
||||||
s+TLb1cgbz/WGIEXgbe6dUWDJXqll4mulouuJJKTw6eIW16gE30P78T2047mPpEU
|
|
||||||
1qXi+jdpNpJLYdPCJRuE9g+IYlIj7SZZT6yL4lG/hbbpujZwNHeKe6/uASzHAwAR
|
|
||||||
AQABiQI2BBgBCAAgFiEEynV/53t4eFvEnqC2DcCWd83WrR0FAmXjQi0CGwwACgkQ
|
|
||||||
DcCWd83WrR3sQhAA6BYv5Cst0D8Xn30KODCdqb9ah3wUIOUcVTQLH9V/zrhXlyds
|
|
||||||
HN0Ior+AZvQlYnZKyMDwozS25Kk2D1XZ3QH6eEZbjWJhhb2gwZFLO/xupS5xLrJZ
|
|
||||||
WfM0zne0aCTKckUv3WVLi25CcLEnS2JBmlqDMDPntzX9M1ZHqYLKeaHlErNkGoRj
|
|
||||||
EQ5g2nBobx/hpph09li03yEi97CvJb7XWLNn7ZWFPzLfsbOHq9mhTxM082LLnJAu
|
|
||||||
++/JGzBQDdxi9pz9AD7CHCfSdooSgjZumH9ImjvsjJnq7iqU+01rEq0gAZMIjCVR
|
|
||||||
pfwl5KGmtSiuPLXppOBiwDw3sde4f53Ld2figvtj4/G0QNAno2QZMYNZuSpASoWR
|
|
||||||
fQ6QMNRyR2fjX0AntKjZTT6kfdRwShOAWxu1IR1NE1FWEDS5s0qG7S9ks8u614Pe
|
|
||||||
wRs8QbS+iVFuFOYMSuy/q5l3I2hVgmLim0kstPUG37iUt9Pll0SvRFluRBO/Vxdu
|
|
||||||
7hPWruxQre5+d8q/J3MBeos7RrbldgpyhvSfS7z4vLsW/cDpshGuCZV/dC6QuKb4
|
|
||||||
V+Of+dpfiGZpyoXFVA6N13SNys0AagzPzGKsESrFtTtTjUXXbQtRMAYCYolo71cf
|
|
||||||
kFUVWJEsf6JYxcrmKn3zxlDpNi+LLkSLyvsAj5SdskW+N07yjzTldsORD1g=
|
|
||||||
=OaHj
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
||||||
#+end_src
|
|
||||||
|
|
5
content/credits.org
Normal file
5
content/credits.org
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#+title: Credits
|
||||||
|
|
||||||
|
This website is created with [[https://orgmode.org/][Org mode]] in [[https://www.gnu.org/software/emacs/][GNU Emacs]] and is heavily influenced by the source code David Wilson's website [[https://systemcrafters.net/][System Crafters]].
|
||||||
|
|
||||||
|
I also thank my friends Sidak Singh Grewal and Pranav Kalsi for bullying me into making this website.
|
|
@ -1,21 +1,10 @@
|
||||||
#+TITLE: Home
|
#+TITLE: Welcome to cosmicflow
|
||||||
#+created: [2024-03-01 Fri]
|
#+created: [2024-03-01 Fri]
|
||||||
#+setupfile: main.setup
|
#+setupfile: main.setup
|
||||||
|
|
||||||
#+begin_center
|
Cosmicflow is a site devoted to the interests of Dibyashanu Pati.
|
||||||
: +------------------------------------------------------------------------------------------------------------------------+
|
|
||||||
: | ██████╗ ██████╗ ███████╗ ███╗ ███╗ ██╗ ██████╗ ██████╗ ██╗ ██████╗ █████╗ ████████╗ ███████╗ ███████╗ |
|
I'm currently a student, I love Physics, Mathematics, Astronomy and Computers.
|
||||||
: | ██╔════╝ ██╔═══██╗ ██╔════╝ ████╗ ████║ ██║ ██╔════╝ ██╔══██╗ ██║ ██╔══██╗ ██╔══██╗ ╚══██╔══╝ ██╔════╝ ██╔════╝ |
|
|
||||||
: | ██║ ██║ ██║ ███████╗ ██╔████╔██║ ██║ ██║ █████╗ ██████╔╝ ██║ ██████╔╝ ███████║ ██║ █████╗ ███████╗ |
|
|
||||||
: | ██║ ██║ ██║ ╚════██║ ██║╚██╔╝██║ ██║ ██║ ╚════╝ ██╔═══╝ ██║ ██╔══██╗ ██╔══██║ ██║ ██╔══╝ ╚════██║ |
|
|
||||||
: | ╚██████╗ ╚██████╔╝ ███████║ ██║ ╚═╝ ██║ ██║ ╚██████╗ ██║ ██║ ██║ ██║ ██║ ██║ ██║ ███████╗ ███████║ |
|
|
||||||
: | ╚═════╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚══════╝ |
|
|
||||||
: +------------------------------------------------------------------------------------------------------------------------+
|
|
||||||
#+end_center
|
|
||||||
|
|
||||||
#+name: link-list
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
| [[file:index.org][Home]] | [[file:blogs/blog-index.org][Blogs]] | [[file:about.org][About]] | [[file:FAQ.org][FAQ]] | [[file:news.org][News]] | [[file:contact.org][PGP]] | [[file:links.org][Links]] |
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
#+title: Links
|
|
||||||
#+created: [2024-03-06 Wed]
|
|
||||||
#+last_modified: [2024-03-06 Wed]
|
|
||||||
#+setupfile: main.setup
|
|
||||||
|
|
||||||
|
|
||||||
#+HTML_HEAD:<style>
|
#+HTML_HEAD:<style>
|
||||||
#+HTML_HEAD: h2 {
|
#+HTML_HEAD: h2 {
|
||||||
#+HTML_HEAD: margin-top: 30px;
|
#+HTML_HEAD: margin-top: 30px;
|
||||||
|
@ -28,18 +22,8 @@
|
||||||
: +------------------------------------------+
|
: +------------------------------------------+
|
||||||
#+end_center
|
#+end_center
|
||||||
|
|
||||||
#+name: link-list
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
| [[file:index.org][Home]] | [[file:blogs/blog-index.org][Blogs]] | [[file:about.org][About]] | [[file:FAQ.org][FAQ]] | [[file:news.org][News]] | [[file:contact.org][PGP]] | [[file:links.org][Links]] |
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
|
|
||||||
#+TOC: headlines 1
|
#+TOC: headlines 1
|
||||||
|
|
||||||
* cosmicpirates.space
|
* cosmicpirates.space
|
||||||
** Clearnet
|
** Clearnet
|
||||||
https://cosmicpirates.space/
|
https://cosmicpirates.space/
|
||||||
|
|
||||||
|
|
||||||
** TOR
|
|
||||||
#+name: tor-onionv3-address.txt
|
|
||||||
Not found
|
|
|
@ -1,58 +0,0 @@
|
||||||
# -*- mode: org; -*-
|
|
||||||
|
|
||||||
# These are the options for a main page
|
|
||||||
# The Title is expected to be provided individually at the head of each file for pages with main type
|
|
||||||
#+startup: overview
|
|
||||||
|
|
||||||
* Org defualts
|
|
||||||
#+OPTIONS: num:nil ^:{} title:nil toc:nil
|
|
||||||
|
|
||||||
* HTML
|
|
||||||
The following are the html customiation options
|
|
||||||
|
|
||||||
** Setting the background color to black and Margins
|
|
||||||
#+HTML_HEAD:<style> body { background-color: #000000; color: #eeeeee; } </style>
|
|
||||||
#+HTML_HEAD:<style> pre { background-color: #000000;color: #ffd700;border: 5px double #569b9e ;padding 5px} </style>
|
|
||||||
|
|
||||||
** Seting up tags
|
|
||||||
*** p
|
|
||||||
#+HTML_HEAD:<style>
|
|
||||||
#+HTML_HEAD: p {
|
|
||||||
#+HTML_HEAD: margin-top: 20px;
|
|
||||||
#+HTML_HEAD: margin-bottom: 20px;
|
|
||||||
#+HTML_HEAD: margin-left: 30px;
|
|
||||||
#+HTML_HEAD: margin-right: 30px;
|
|
||||||
#+HTML_HEAD: text-align: center;
|
|
||||||
#+HTML_HEAD: }
|
|
||||||
#+HTML_HEAD:</style>
|
|
||||||
*** h2
|
|
||||||
#+HTML_HEAD:<style>
|
|
||||||
#+HTML_HEAD: h2 {
|
|
||||||
#+HTML_HEAD: margin-top: 100px;
|
|
||||||
#+HTML_HEAD: margin-bottom: 20px;
|
|
||||||
#+HTML_HEAD: margin-left: 10px;
|
|
||||||
#+HTML_HEAD: margin-right: 10px;
|
|
||||||
#+HTML_HEAD: font-size: 35px;
|
|
||||||
#+HTML_HEAD: color: #a3373c;
|
|
||||||
#+HTML_HEAD: text-align: center;
|
|
||||||
#+HTML_HEAD: padding 5px;
|
|
||||||
#+HTML_HEAD: }
|
|
||||||
#+HTML_HEAD:</style>
|
|
||||||
|
|
||||||
*** Setting up the h3 heading
|
|
||||||
#+HTML_HEAD:<style>
|
|
||||||
#+HTML_HEAD: h3 {font-size: 30px;
|
|
||||||
#+HTML_HEAD: color: #3778a3;
|
|
||||||
#+HTML_HEAD: text-align: center;
|
|
||||||
#+HTML_HEAD: }
|
|
||||||
#+HTML_HEAD: </style>
|
|
||||||
|
|
||||||
*** table of contents
|
|
||||||
#+HTML_HEAD:<style> #table-of-contents { background-color: #10100c; color: #eeeeee;max-width: 30em; } </style>
|
|
||||||
|
|
||||||
** Alligning center blocks to the center
|
|
||||||
#+HTML_HEAD:<style> .org-center {text-align: center;} </style>
|
|
||||||
|
|
||||||
** Setting up tables to always be in the center
|
|
||||||
#+HTML_HEAD:<style> table { margin-left: auto; margin-right:auto; } </style>
|
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
#+title: News
|
|
||||||
#+created: [2024-03-01 Fri]
|
|
||||||
#+last_modified: [2024-03-06 Wed]
|
|
||||||
#+setupfile: main.setup
|
|
||||||
|
|
||||||
#+begin_center
|
#+begin_center
|
||||||
: +--------------------------------------+
|
: +--------------------------------------+
|
||||||
: | _ _ |
|
: | _ _ |
|
||||||
|
@ -13,12 +8,4 @@
|
||||||
: +--------------------------------------+
|
: +--------------------------------------+
|
||||||
#+end_center
|
#+end_center
|
||||||
|
|
||||||
#+name: link-list
|
* Created this site from scratch - [2024-08-17 Sat]
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
| [[file:index.org][Home]] | [[file:blogs/blog-index.org][Blogs]] | [[file:about.org][About]] | [[file:FAQ.org][FAQ]] | [[file:news.org][News]] | [[file:contact.org][PGP]] | [[file:links.org][Links]] |
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
|
|
||||||
* TOR and I2P - [2024-03-06 Wed]
|
|
||||||
Went live on I2P
|
|
||||||
#+name: i2p-b32-address.txt
|
|
||||||
Not found
|
|
||||||
|
|
3
content/privacy_policy.org
Normal file
3
content/privacy_policy.org
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#+title: Privacy Policy
|
||||||
|
|
||||||
|
I *do not* intentionally collect any data of visitors.
|
1
content/source_code.org
Normal file
1
content/source_code.org
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Coming Soon
|
|
@ -1 +0,0 @@
|
||||||
http://dbtjoqs5jnsyq6m6r35a47jix2v4zeloz5fpxi6htwihpnv3fcxq.b32.i2p
|
|
|
@ -1 +0,0 @@
|
||||||
http://acfc2abqv65bdiwimrx74vrlxy6eel66cjlmgqqvdekcrx7ufl3c2cad.onion
|
|
|
@ -1,7 +1,6 @@
|
||||||
#+title: Test Blog
|
#+title: Test Blog
|
||||||
#+created: [2024-02-05 Thu]
|
#+created: [2024-08-17 Sat]
|
||||||
#+last_modified:
|
#+last_modified: [2024-08-17 Sat]
|
||||||
#+setupfile: blog.setup
|
|
||||||
#+author: Dibyashanu Pati
|
#+author: Dibyashanu Pati
|
||||||
|
|
||||||
* Introduction
|
* Introduction
|
428
create-site.el
Normal file → Executable file
428
create-site.el
Normal file → Executable file
|
@ -3,6 +3,7 @@
|
||||||
(require 'package)
|
(require 'package)
|
||||||
(setq package-user-dir (expand-file-name "./.packages"))
|
(setq package-user-dir (expand-file-name "./.packages"))
|
||||||
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
||||||
|
("melpa-stable" . "https://stable.melpa.org/packages/")
|
||||||
("elpa" . "https://elpa.gnu.org/packages/")))
|
("elpa" . "https://elpa.gnu.org/packages/")))
|
||||||
|
|
||||||
;; Initialize the package system
|
;; Initialize the package system
|
||||||
|
@ -10,6 +11,19 @@
|
||||||
(unless package-archive-contents
|
(unless package-archive-contents
|
||||||
(package-refresh-contents))
|
(package-refresh-contents))
|
||||||
|
|
||||||
|
;; Install use-package
|
||||||
|
(unless (package-installed-p 'use-package)
|
||||||
|
(package-install 'use-package))
|
||||||
|
(require 'use-package)
|
||||||
|
|
||||||
|
;;; see these later
|
||||||
|
;; Require built-in dependencies
|
||||||
|
(require 'vc-git)
|
||||||
|
(require 'ox-publish)
|
||||||
|
(require 'subr-x)
|
||||||
|
(require 'cl-lib)
|
||||||
|
|
||||||
|
|
||||||
;; Install dependencies
|
;; Install dependencies
|
||||||
(package-install 'htmlize)
|
(package-install 'htmlize)
|
||||||
(package-install 'ox-gemini)
|
(package-install 'ox-gemini)
|
||||||
|
@ -20,60 +34,380 @@
|
||||||
(require 'ox-publish)
|
(require 'ox-publish)
|
||||||
(use-package ox-gemini)
|
(use-package ox-gemini)
|
||||||
|
|
||||||
|
;; Install other dependencies
|
||||||
|
(use-package esxml
|
||||||
|
:pin "melpa-stable"
|
||||||
|
:ensure t)
|
||||||
|
|
||||||
(setq org-publish-use-timestamps-flag nil)
|
(use-package htmlize
|
||||||
(setq org-html-validation-link nil
|
:ensure t)
|
||||||
org-html-head-include-scripts nil
|
|
||||||
org-html-head-include-default-style nil
|
(use-package webfeeder
|
||||||
org-html-preamble nil
|
:ensure t)
|
||||||
org-html-postamble nil
|
|
||||||
org-html-use-infojs nil
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
(setq org-publish-project-alist '(
|
|
||||||
("cosmicpirates-html"
|
|
||||||
:base-directory "./content"
|
|
||||||
:base-extension "org"
|
|
||||||
:publishing-directory "public/cosmicpirates.space-html"
|
|
||||||
:recursive t
|
|
||||||
:publishing-function org-html-publish-to-html
|
|
||||||
;;:with-author nil
|
|
||||||
;;:with-creator nil
|
|
||||||
;;:email nil
|
|
||||||
:with-timestamps nil
|
|
||||||
)
|
|
||||||
|
|
||||||
("cosmicpirates-html-static"
|
(defvar yt-iframe-format
|
||||||
:base-directory "./content/static"
|
(concat "<div class=\"video\">"
|
||||||
:base-extension "css\\|ttf\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|mp4\\|xml\\|html"
|
" <iframe src=\"https://www.youtube.com/embed/%s\" allowfullscreen></iframe>"
|
||||||
:publishing-directory "./public/cosmicpirates.space-html/static"
|
"</div>"))
|
||||||
:recursive t
|
|
||||||
:publishing-function org-publish-attachment
|
|
||||||
)
|
|
||||||
|
|
||||||
("cosmicpirates-gmi"
|
(defun my/embed-video (video-id)
|
||||||
:base-directory "./content"
|
(format yt-iframe-format video-id))
|
||||||
:base-extension "org"
|
|
||||||
:publishing-directory "./public/cosmicpirates.space-gmi"
|
|
||||||
:recursive t
|
|
||||||
:publishing-function org-gemini-publish-to-gemini
|
|
||||||
:with-author nil
|
|
||||||
:with-creator nil
|
|
||||||
:email nil
|
|
||||||
:with-timestamps nil
|
|
||||||
)
|
|
||||||
|
|
||||||
("cosmicpirates-gmi-static"
|
|
||||||
:base-directory "./content/static"
|
|
||||||
:base-extension "css\\|ttf\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|xml\\|html"
|
(setq user-full-name "Dibyashanu Pati")
|
||||||
:publishing-directory "./public/cosmicpirates.space-gmi/static"
|
(setq user-mail-address "dibyashanu@protonmail.com")
|
||||||
:recursive t
|
|
||||||
:publishing-function org-publish-attachment
|
(defvar my/site-url (if (string-equal (getenv "CI") "true")
|
||||||
export txt file as txt file in org html website publish
|
"https://cosmicflow.space"
|
||||||
)
|
"http://localhost:8080")
|
||||||
)
|
"The URL for the site being generated.")
|
||||||
|
|
||||||
|
(defun my/site-header ()
|
||||||
|
(list `(header (@ (class "site-header"))
|
||||||
|
(div (@ (class "container"))
|
||||||
|
(div (@ (class "site-title"))
|
||||||
|
(img (@ (class "logo")
|
||||||
|
(src "/pics/sc_logo.png")
|
||||||
|
(alt "Cosmicflow")))))
|
||||||
|
(div (@ (class "site-masthead"))
|
||||||
|
(div (@ (class "container"))
|
||||||
|
(nav (@ (class "nav"))
|
||||||
|
(a (@ (class "nav-link") (href "/")) "Home") " "
|
||||||
|
(a (@ (class "nav-link") (href "/blogs/")) "Blog") " "
|
||||||
|
(a (@ (class "nav-link") (href "/about/")) "About") " "
|
||||||
|
(a (@ (class "nav-link") (href "/contact/")) "PGP") " "
|
||||||
|
(a (@ (class "nav-link") (href "/links/")) "Links") " "
|
||||||
|
;; (a (@ (class "nav-link") (href "https://store.systemcrafters.net?utm_source=sc-site-nav")) "Store") " "
|
||||||
|
(a (@ (class "nav-link") (href "/news/")) "News")))))))
|
||||||
|
|
||||||
|
(defun my/site-footer ()
|
||||||
|
(list `(footer (@ (class "site-footer"))
|
||||||
|
(div (@ (class "container"))
|
||||||
|
(div (@ (class "row"))
|
||||||
|
(div (@ (class "column"))
|
||||||
|
(p (a (@ (href "/privacy_policy/")) "Privacy Policy")
|
||||||
|
" · "
|
||||||
|
(a (@ (href "/credits/")) "Credits")
|
||||||
|
" · "
|
||||||
|
(a (@ (href "/source_code/")) "Source Code")
|
||||||
|
;; " · "
|
||||||
|
;; (a (@ (rel "me") (href "https://fosstodon.org/@daviwil")) "Fediverse"))
|
||||||
|
(p "© 2024 Dibyashanu Pati - Except where otherwise noted, this work is licensed under http://creativecommons.org/licenses/by/3.0/"
|
||||||
|
(img (@ (class "column align-left")
|
||||||
|
(src "/pics/CCLogoColorPop1.gif")
|
||||||
|
(style "width: 40px")
|
||||||
|
(alt "Except where otherwise noted, this work is licensed under http://creativecommons.org/licenses/by/3.0/")))
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
)))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun get-article-output-path (org-file pub-dir)
|
||||||
|
(let ((article-dir (concat pub-dir
|
||||||
|
(downcase
|
||||||
|
(file-name-as-directory
|
||||||
|
(file-name-sans-extension
|
||||||
|
(file-name-nondirectory org-file)))))))
|
||||||
|
|
||||||
|
(if (string-match "\\/index.org\\|\\/404.org$" org-file)
|
||||||
|
pub-dir
|
||||||
|
(progn
|
||||||
|
(unless (file-directory-p article-dir)
|
||||||
|
(make-directory article-dir t))
|
||||||
|
article-dir))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun my/get-commit-hash ()
|
||||||
|
"Get the short hash of the latest commit in the current repository."
|
||||||
|
(string-trim-right
|
||||||
|
(with-output-to-string
|
||||||
|
(with-current-buffer standard-output
|
||||||
|
(vc-git-command t nil nil "rev-parse" "--short" "HEAD")))))
|
||||||
|
|
||||||
|
|
||||||
|
(cl-defun my/generate-page (title
|
||||||
|
content
|
||||||
|
info
|
||||||
|
&key
|
||||||
|
(publish-date)
|
||||||
|
(head-extra)
|
||||||
|
(pre-content)
|
||||||
|
(exclude-header)
|
||||||
|
(exclude-footer))
|
||||||
|
(concat
|
||||||
|
"<!-- Generated from " (my/get-commit-hash) " on " (format-time-string "%Y-%m-%d @ %H:%M") " with " org-export-creator-string " -->\n"
|
||||||
|
"<!DOCTYPE html>"
|
||||||
|
(sxml-to-xml
|
||||||
|
`(html (@ (lang "en"))
|
||||||
|
(head
|
||||||
|
(meta (@ (charset "utf-8")))
|
||||||
|
(meta (@ (author "Cosmicflow - Dibyashanu Pati")))
|
||||||
|
(meta (@ (name "viewport")
|
||||||
|
(content "width=device-width, initial-scale=1, shrink-to-fit=no")))
|
||||||
|
(link (@ (rel "icon") (type "image/png") (href "/img/favicon.png")))
|
||||||
|
(link (@ (rel "alternative")
|
||||||
|
(type "application/rss+xml")
|
||||||
|
(title "System Crafters News")
|
||||||
|
(href "/rss/news.xml")))
|
||||||
|
(link (@ (rel "stylesheet") (href "/fonts/iosevka-aile/iosevka-aile.css")))
|
||||||
|
(link (@ (rel "stylesheet") (href "/fonts/jetbrains-mono/jetbrains-mono.css")))
|
||||||
|
(link (@ (rel "stylesheet") (href "/css/code.css")))
|
||||||
|
(link (@ (rel "stylesheet") (href "/css/site.css")))
|
||||||
|
;; (script (@ (defer "defer")
|
||||||
|
;; (data-domain "systemcrafters.net")
|
||||||
|
;; (src "https://plausible.io/js/plausible.js"))
|
||||||
|
;; ;; Empty string to cause a closing </script> tag
|
||||||
|
;; "")
|
||||||
|
;; ,(when head-extra head-extra)
|
||||||
|
(title ,(concat title " - Cosmicflow")))
|
||||||
|
(body ,@(unless exclude-header
|
||||||
|
(my/site-header))
|
||||||
|
(div (@ (class "container"))
|
||||||
|
(div (@ (class "site-post"))
|
||||||
|
(h1 (@ (class "site-post-title"))
|
||||||
|
,title)
|
||||||
|
,(when publish-date
|
||||||
|
`(p (@ (class "site-post-meta")) ,publish-date))
|
||||||
|
,(if-let ((video-id (plist-get info :video)))
|
||||||
|
(my/embed-video video-id))
|
||||||
|
,(when pre-content pre-content)
|
||||||
|
(div (@ (id "content"))
|
||||||
|
,content))
|
||||||
|
)
|
||||||
|
,@(unless exclude-footer
|
||||||
|
(my/site-footer)))))))
|
||||||
|
|
||||||
|
(defun my/org-html-template (contents info)
|
||||||
|
(my/generate-page (org-export-data (plist-get info :title) info)
|
||||||
|
contents
|
||||||
|
info
|
||||||
|
:publish-date (org-export-data (org-export-get-date info "%B %e, %Y") info)))
|
||||||
|
|
||||||
|
(defun my/org-html-link (link contents info)
|
||||||
|
"Removes file extension and changes the path into lowercase file:// links."
|
||||||
|
(when (and (string= 'file (org-element-property :type link))
|
||||||
|
(string= "org" (file-name-extension (org-element-property :path link))))
|
||||||
|
(org-element-put-property link :path
|
||||||
|
(downcase
|
||||||
|
(file-name-sans-extension
|
||||||
|
(org-element-property :path link)))))
|
||||||
|
|
||||||
|
(let ((exported-link (org-export-custom-protocol-maybe link contents 'html info)))
|
||||||
|
(cond
|
||||||
|
(exported-link exported-link)
|
||||||
|
((equal contents nil)
|
||||||
|
(format "<a href=\"%s\">%s</a>"
|
||||||
|
(org-element-property :raw-link link)
|
||||||
|
(org-element-property :raw-link link)))
|
||||||
|
((string-prefix-p "/" (org-element-property :raw-link link))
|
||||||
|
(format "<a href=\"%s\">%s</a>"
|
||||||
|
(org-element-property :raw-link link)
|
||||||
|
contents))
|
||||||
|
(t (org-export-with-backend 'html link contents info)))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun my/make-heading-anchor-name (headline-text)
|
||||||
|
(thread-last headline-text
|
||||||
|
(downcase)
|
||||||
|
(replace-regexp-in-string " " "-")
|
||||||
|
(replace-regexp-in-string "[^[:alnum:]_-]" "")))
|
||||||
|
|
||||||
|
|
||||||
|
(defun my/org-html-headline (headline contents info)
|
||||||
|
(let* ((text (org-export-data (org-element-property :title headline) info))
|
||||||
|
(level (org-export-get-relative-level headline info))
|
||||||
|
(level (min 7 (when level (1+ level))))
|
||||||
|
(anchor-name (my/make-heading-anchor-name text))
|
||||||
|
(attributes (org-element-property :ATTR_HTML headline))
|
||||||
|
(container (org-element-property :HTML_CONTAINER headline))
|
||||||
|
(container-class (and container (org-element-property :HTML_CONTAINER_CLASS headline))))
|
||||||
|
(when attributes
|
||||||
|
(setq attributes
|
||||||
|
(format " %s" (org-html--make-attribute-string
|
||||||
|
(org-export-read-attribute 'attr_html `(nil
|
||||||
|
(attr_html ,(split-string attributes))))))))
|
||||||
|
(concat
|
||||||
|
(when (and container (not (string= "" container)))
|
||||||
|
(format "<%s%s>" container (if container-class (format " class=\"%s\"" container-class) "")))
|
||||||
|
(if (not (org-export-low-level-p headline info))
|
||||||
|
(format "<h%d%s><a id=\"%s\" class=\"anchor\" href=\"#%s\">¶</a>%s</h%d>%s"
|
||||||
|
level
|
||||||
|
(or attributes "")
|
||||||
|
anchor-name
|
||||||
|
anchor-name
|
||||||
|
text
|
||||||
|
level
|
||||||
|
(or contents ""))
|
||||||
|
(concat
|
||||||
|
(when (org-export-first-sibling-p headline info) "<ul>")
|
||||||
|
(format "<li>%s%s</li>" text (or contents ""))
|
||||||
|
(when (org-export-last-sibling-p headline info) "</ul>")))
|
||||||
|
(when (and container (not (string= "" container)))
|
||||||
|
(format "</%s>" (cl-subseq container 0 (cl-search " " container)))))))
|
||||||
|
|
||||||
|
(defun my/org-html-src-block (src-block _contents info)
|
||||||
|
(let* ((lang (org-element-property :language src-block))
|
||||||
|
(code (org-html-format-code src-block info)))
|
||||||
|
(format "<pre>%s</pre>" (string-trim code))))
|
||||||
|
|
||||||
|
(defun my/org-html-special-block (special-block contents info)
|
||||||
|
"Transcode a SPECIAL-BLOCK element from Org to HTML.
|
||||||
|
CONTENTS holds the contents of the block. INFO is a plist
|
||||||
|
holding contextual information."
|
||||||
|
(let* ((block-type (org-element-property :type special-block))
|
||||||
|
(attributes (org-export-read-attribute :attr_html special-block)))
|
||||||
|
(format "<div class=\"%s center\">\n%s\n</div>"
|
||||||
|
block-type
|
||||||
|
(or contents
|
||||||
|
(if (string= block-type "cta")
|
||||||
|
"If you find this guide helpful, please consider supporting System Crafters via the links on the <a href=\"/how-to-help/#support-my-work\">How to Help</a> page!"
|
||||||
|
"")))))
|
||||||
|
|
||||||
|
(org-export-define-derived-backend 'site-html 'html
|
||||||
|
:translate-alist
|
||||||
|
'((template . my/org-html-template)
|
||||||
|
(link . my/org-html-link)
|
||||||
|
(src-block . my/org-html-src-block)
|
||||||
|
(special-block . my/org-html-special-block)
|
||||||
|
(headline . my/org-html-headline))
|
||||||
|
:options-alist
|
||||||
|
'((:video "VIDEO" nil nil)))
|
||||||
|
|
||||||
|
(defun org-html-publish-to-html (plist filename pub-dir)
|
||||||
|
"Publish an org file to HTML, using the FILENAME as the output directory."
|
||||||
|
(let ((article-path (get-article-output-path filename pub-dir)))
|
||||||
|
(cl-letf (((symbol-function 'org-export-output-file-name)
|
||||||
|
(lambda (extension &optional subtreep pub-dir)
|
||||||
|
;; The 404 page is a special case, it must be named "404.html"
|
||||||
|
(concat article-path
|
||||||
|
(if (string= (file-name-nondirectory filename) "404.org") "404" "index")
|
||||||
|
extension))))
|
||||||
|
(org-publish-org-to 'site-html
|
||||||
|
filename
|
||||||
|
(concat "." (or (plist-get plist :html-extension)
|
||||||
|
"html"))
|
||||||
|
plist
|
||||||
|
article-path))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun my/rss-extract-title (html-file)
|
||||||
|
"Extract the title from an HTML file."
|
||||||
|
(with-temp-buffer
|
||||||
|
(insert-file-contents html-file)
|
||||||
|
(let ((dom (libxml-parse-html-region (point-min) (point-max))))
|
||||||
|
(dom-text (car (dom-by-class dom "site-post-title"))))))
|
||||||
|
|
||||||
|
(defun my/rss-extract-date (html-file)
|
||||||
|
"Extract the post date from an HTML file."
|
||||||
|
(with-temp-buffer
|
||||||
|
(insert-file-contents html-file)
|
||||||
|
(let* ((dom (libxml-parse-html-region (point-min) (point-max)))
|
||||||
|
(date-string (dom-text (car (dom-by-class dom "site-post-meta"))))
|
||||||
|
(parsed-date (parse-time-string date-string))
|
||||||
|
(day (nth 3 parsed-date))
|
||||||
|
(month (nth 4 parsed-date))
|
||||||
|
(year (nth 5 parsed-date)))
|
||||||
|
;; NOTE: Hardcoding this at 8am for now
|
||||||
|
(encode-time 0 0 8 day month year))))
|
||||||
|
|
||||||
|
(setq webfeeder-title-function #'my/rss-extract-title
|
||||||
|
webfeeder-date-function #'my/rss-extract-date)
|
||||||
|
|
||||||
|
;; (setq org-publish-use-timestamps-flag nil)
|
||||||
|
;; (setq org-html-validation-link nil
|
||||||
|
;; org-html-head-include-scripts nil
|
||||||
|
;; org-html-head-include-default-style nil
|
||||||
|
;; org-html-preamble nil
|
||||||
|
;; org-html-postamble nil
|
||||||
|
;; org-html-use-infojs nil
|
||||||
|
;; )
|
||||||
|
(setq org-publish-use-timestamps-flag t
|
||||||
|
org-publish-timestamp-directory "./.org-cache/"
|
||||||
|
org-export-with-section-numbers nil
|
||||||
|
org-export-use-babel nil
|
||||||
|
org-export-with-smart-quotes t
|
||||||
|
org-export-with-sub-superscripts nil
|
||||||
|
org-export-with-tags 'not-in-toc
|
||||||
|
org-html-htmlize-output-type 'css
|
||||||
|
org-html-prefer-user-labels t
|
||||||
|
;; org-html-link-home my/site-url
|
||||||
|
org-html-link-use-abs-url t
|
||||||
|
org-html-link-org-files-as-html t
|
||||||
|
org-html-html5-fancy t
|
||||||
|
org-html-self-link-headlines t
|
||||||
|
org-export-with-toc nil
|
||||||
|
make-backup-files nil)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(setq org-publish-project-alist
|
||||||
|
(list '("cosmicflow:main"
|
||||||
|
:base-directory "./content"
|
||||||
|
:base-extension "org"
|
||||||
|
:publishing-directory "./public/cosmicflow-html"
|
||||||
|
:publishing-function org-html-publish-to-html
|
||||||
|
:with-title nil
|
||||||
|
;;:with-author nil
|
||||||
|
;;:with-creator nil
|
||||||
|
;;:email nil
|
||||||
|
:with-timestamps nil)
|
||||||
|
'("cosmicflow:assets"
|
||||||
|
:base-directory "./assets"
|
||||||
|
:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|woff2\\|ttf"
|
||||||
|
:publishing-directory "./public/cosmicflow-html"
|
||||||
|
:recursive t
|
||||||
|
:publishing-function org-publish-attachment)
|
||||||
|
|
||||||
|
'("cosmicpirates-gmi"
|
||||||
|
:base-directory "./content"
|
||||||
|
:base-extension "org"
|
||||||
|
:publishing-directory "./public/cosmicflow-gmi"
|
||||||
|
:recursive t
|
||||||
|
:publishing-function org-gemini-publish-to-gemini
|
||||||
|
:with-author nil
|
||||||
|
:with-creator nil
|
||||||
|
:email nil
|
||||||
|
:with-timestamps nil)
|
||||||
|
;; ("cosmicpirates-gmi-static"
|
||||||
|
;; :base-directory "./content/static"
|
||||||
|
;; :base-extension "css\\|ttf\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|xml\\|html"
|
||||||
|
;; :publishing-directory "./public/cosmicpirates.space-gmi/static"
|
||||||
|
;; :recursive t
|
||||||
|
;; :publishing-function org-publish-attachment
|
||||||
|
;; export txt file as txt file in org html website publish
|
||||||
|
;; )
|
||||||
|
)
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
;; (defun my/publish ()
|
||||||
|
;; "Publish the entire site."
|
||||||
|
;; (interactive)
|
||||||
|
;; (org-publish-all (string-equal (or (getenv "FORCE")
|
||||||
|
;; (getenv "CI"))
|
||||||
|
;; "true"))
|
||||||
|
|
||||||
|
;; (webfeeder-build "rss/news.xml"
|
||||||
|
;; "./public"
|
||||||
|
;; my/site-url
|
||||||
|
;; (let ((default-directory (expand-file-name "./public/")))
|
||||||
|
;; (remove "news/index.html"
|
||||||
|
;; (directory-files-recursively "news"
|
||||||
|
;; ".*\\.html$")))
|
||||||
|
;; :builder 'webfeeder-make-rss
|
||||||
|
;; :title "cosmiflow news"
|
||||||
|
;; :description "News and Insights from Cosmicflow!"
|
||||||
|
;; :author "Dibyashanu Pati")
|
||||||
|
|
||||||
|
;; )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;; publish the websites
|
;; publish the websites
|
||||||
(org-publish-all t)
|
(org-publish-all t)
|
||||||
|
|
11
create.sh
11
create.sh
|
@ -1,13 +1,4 @@
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
# update addresses
|
|
||||||
python scripts/generate_and_update_address_files.py
|
|
||||||
|
|
||||||
#Add headings links to all top level files
|
|
||||||
python scripts/heading-link-generator.py
|
|
||||||
|
|
||||||
# Generate the main blog table
|
|
||||||
python scripts/blog-table-generator.py
|
|
||||||
|
|
||||||
# generate the html and gemini versions of the site using org-publish
|
# generate the html and gemini versions of the site using org-publish
|
||||||
emacs -Q --script create-site.el
|
emacs -Q --batch -l create-site.el
|
||||||
|
|
616
main.org
616
main.org
|
@ -1,616 +0,0 @@
|
||||||
#+title: Main
|
|
||||||
#+startup: overview
|
|
||||||
|
|
||||||
* Usage Instructions and Best Practices
|
|
||||||
** Basic Plan
|
|
||||||
+ The entire organization of the website is generated by the +scripts in this file+ scripts in the [[file:scripts/]] directory.
|
|
||||||
+ These scripts generated by this file.
|
|
||||||
+ To run the scripts in [[file:scripts/]] and to generate the website just run [[file:create.sh]]
|
|
||||||
|
|
||||||
** Software and tools
|
|
||||||
+ python
|
|
||||||
+ [[https://www.gnu.org/software/emacs/][Emacs]]
|
|
||||||
** Advice
|
|
||||||
+ Do not use the #+include tag
|
|
||||||
Writing dynamic content to files and then using #+include to include them in other files has unreliable link conversion
|
|
||||||
|
|
||||||
|
|
||||||
* Static content and Sample code snippets
|
|
||||||
** Generating the README.md file
|
|
||||||
#+begin_src md :tangle README.md
|
|
||||||
# cosmicpirates.space
|
|
||||||
This is the source code of the cosmicpirates.space website
|
|
||||||
|
|
||||||
## Quickstart
|
|
||||||
Currently in the cosmicpirates.space source can ge accessed on our private [Gitea](https://about.gitea.com/) server.
|
|
||||||
|
|
||||||
### Step 1 : SSH into the cosmicpirates server with forward tunnel of port 3000 to your local port 3000
|
|
||||||
ssh into the server and forward the port on which Gitea is running(in our case port 3000) into our local port 3000
|
|
||||||
|
|
||||||
```console
|
|
||||||
ssh -L 3000:localhost:3000 pirate@cosmicpirates.space
|
|
||||||
```
|
|
||||||
### Step 2: Open Gitea on your Browser
|
|
||||||
Open http://localhost:3000/ in your browser
|
|
||||||
Create an account if nessasary(Not required if you just want to view but required if you want to push to a repo).
|
|
||||||
You should be able to see this project repository at http://localhost:3000/dibyashanu/cosmicpirates.space
|
|
||||||
|
|
||||||
### Step 3: Clone the repo
|
|
||||||
Make a local copy of this repo
|
|
||||||
```console
|
|
||||||
git clone http://localhost:3000/dibyashanu/cosmicpirates.space.git
|
|
||||||
```
|
|
||||||
|
|
||||||
Go to the repo directory
|
|
||||||
```console
|
|
||||||
cd cosmicpirates.space.
|
|
||||||
```
|
|
||||||
|
|
||||||
Set a username and email - this will be used to track the changes you make to this repository
|
|
||||||
```console
|
|
||||||
git config user.name "Your Name Here"
|
|
||||||
git config user.email "your@email.com"
|
|
||||||
```
|
|
||||||
|
|
||||||
Set the origin to the required location
|
|
||||||
|
|
||||||
```console
|
|
||||||
git remote add origin http://localhost:3000/dibyashanu/cosmicpirates.space.git
|
|
||||||
```
|
|
||||||
### Step 4: Make changes to the local version of the repository
|
|
||||||
Most of the time try only to make changes to the [main.org](./main.org) and generate all other content by either running scripts in this file or runing org-babel-tangle(C-c C-v t in doom emacs).
|
|
||||||
For more details see [main.org](./main.org)
|
|
||||||
|
|
||||||
### Step 5: Push Your changes to this repository
|
|
||||||
```console
|
|
||||||
$ git push -u origin main
|
|
||||||
```
|
|
||||||
#+end_src
|
|
||||||
** Generating the ASCII headings
|
|
||||||
*** Main Heading
|
|
||||||
#+name: main-heading-text
|
|
||||||
#+begin_src python :results output
|
|
||||||
# Enter the Text you want to be converted
|
|
||||||
text = "Cosmic - Pirates"
|
|
||||||
|
|
||||||
# Choose the font
|
|
||||||
font = "ANSI Shadow"
|
|
||||||
from jimner import jimner
|
|
||||||
j = jimner()
|
|
||||||
|
|
||||||
result = j.get_banner_from_text(font,text)
|
|
||||||
print(result)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: main-heading-text
|
|
||||||
: ██████╗ ██████╗ ███████╗ ███╗ ███╗ ██╗ ██████╗ ██████╗ ██╗ ██████╗ █████╗ ████████╗ ███████╗ ███████╗
|
|
||||||
: ██╔════╝ ██╔═══██╗ ██╔════╝ ████╗ ████║ ██║ ██╔════╝ ██╔══██╗ ██║ ██╔══██╗ ██╔══██╗ ╚══██╔══╝ ██╔════╝ ██╔════╝
|
|
||||||
: ██║ ██║ ██║ ███████╗ ██╔████╔██║ ██║ ██║ █████╗ ██████╔╝ ██║ ██████╔╝ ███████║ ██║ █████╗ ███████╗
|
|
||||||
: ██║ ██║ ██║ ╚════██║ ██║╚██╔╝██║ ██║ ██║ ╚════╝ ██╔═══╝ ██║ ██╔══██╗ ██╔══██║ ██║ ██╔══╝ ╚════██║
|
|
||||||
: ╚██████╗ ╚██████╔╝ ███████║ ██║ ╚═╝ ██║ ██║ ╚██████╗ ██║ ██║ ██║ ██║ ██║ ██║ ██║ ███████╗ ███████║
|
|
||||||
: ╚═════╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚══════╝
|
|
||||||
:
|
|
||||||
:
|
|
||||||
: None
|
|
||||||
*** About Heading
|
|
||||||
#+name: about-heading-text
|
|
||||||
#+begin_src python :results output
|
|
||||||
# Enter the Text you want to be converted
|
|
||||||
text = "About"
|
|
||||||
|
|
||||||
# Choose the font
|
|
||||||
font = "Doom"
|
|
||||||
from jimner import jimner
|
|
||||||
j = jimner()
|
|
||||||
|
|
||||||
print(j.get_banner_from_text(font,text))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: about-heading-text
|
|
||||||
#+begin_example
|
|
||||||
___ _ _
|
|
||||||
/ _ \ | | | |
|
|
||||||
/ /_\ \ | |__ ___ _ _ | |_
|
|
||||||
| _ | | '_ \ / _ \ | | | | | __|
|
|
||||||
| | | | | |_) | | (_) | | |_| | | |_
|
|
||||||
\_| |_/ |_.__/ \___/ \__,_| \__|
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
None
|
|
||||||
#+end_example
|
|
||||||
|
|
||||||
*** News Heading
|
|
||||||
#+name: news-heading-text
|
|
||||||
#+begin_src python :results output
|
|
||||||
# Enter the Text you want to be converted
|
|
||||||
text = "News"
|
|
||||||
|
|
||||||
# Choose the font
|
|
||||||
font = "Ivrit"
|
|
||||||
from jimner import jimner
|
|
||||||
j = jimner()
|
|
||||||
|
|
||||||
print(j.get_banner_from_text(font,text))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: news-heading-text
|
|
||||||
: _ _
|
|
||||||
: | \ | | ___ __ __ ___
|
|
||||||
: | \| | / _ \ \ \ /\ / / / __|
|
|
||||||
: | |\ | | __/ \ V V / \__ \
|
|
||||||
: |_| \_| \___| \_/\_/ |___/
|
|
||||||
:
|
|
||||||
:
|
|
||||||
: None
|
|
||||||
|
|
||||||
*** FAQ Heading
|
|
||||||
|
|
||||||
#+name: FAQ-heading-text
|
|
||||||
#+begin_src python :results output
|
|
||||||
# Enter the Text you want to be converted
|
|
||||||
text = "FAQ"
|
|
||||||
|
|
||||||
# Choose the font
|
|
||||||
font = "Electronic"
|
|
||||||
from jimner import jimner
|
|
||||||
j = jimner()
|
|
||||||
|
|
||||||
print(j.get_banner_from_text(font,text))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: FAQ-heading-text
|
|
||||||
#+begin_example
|
|
||||||
▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄
|
|
||||||
▐░░░░░░░░░░░▌ ▐░░░░░░░░░░░▌ ▐░░░░░░░░░░░▌
|
|
||||||
▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌ ▐░█▀▀▀▀▀▀▀█░▌
|
|
||||||
▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌
|
|
||||||
▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄█░▌ ▐░▌ ▐░▌
|
|
||||||
▐░░░░░░░░░░░▌ ▐░░░░░░░░░░░▌ ▐░▌ ▐░▌
|
|
||||||
▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌ ▐░█▄▄▄▄▄▄▄█░▌
|
|
||||||
▐░▌ ▐░▌ ▐░▌ ▐░░░░░░░░░░░▌
|
|
||||||
▐░▌ ▐░▌ ▐░▌ ▀▀▀▀▀▀█░█▀▀
|
|
||||||
▐░▌ ▐░▌ ▐░▌ ▐░▌
|
|
||||||
▀ ▀ ▀ ▀
|
|
||||||
|
|
||||||
|
|
||||||
None
|
|
||||||
#+end_example
|
|
||||||
|
|
||||||
*** Links Heading
|
|
||||||
#+name: Links-heading-text
|
|
||||||
#+begin_src python :results output
|
|
||||||
# Enter the Text you want to be converted
|
|
||||||
text = "Links"
|
|
||||||
|
|
||||||
# Choose the font
|
|
||||||
font = "Fender"
|
|
||||||
from jimner import jimner
|
|
||||||
j = jimner()
|
|
||||||
|
|
||||||
print(j.get_banner_from_text(font,text))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: Links-heading-text
|
|
||||||
: '|| '||
|
|
||||||
: || '' ||
|
|
||||||
: || || `||''|, || //` (''''
|
|
||||||
: || || || || ||<< `'')
|
|
||||||
: .||...| .||. .|| ||. .|| \\. `...'
|
|
||||||
:
|
|
||||||
:
|
|
||||||
:
|
|
||||||
: None
|
|
||||||
|
|
||||||
*** Contact Heading
|
|
||||||
|
|
||||||
#+begin_src python :results output
|
|
||||||
# Enter the Text you want to be converted
|
|
||||||
text = "Contact"
|
|
||||||
|
|
||||||
# Choose the font
|
|
||||||
font = "Calvin S"
|
|
||||||
from jimner import jimner
|
|
||||||
j = jimner()
|
|
||||||
|
|
||||||
print(j.get_banner_from_text(font,text))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS:
|
|
||||||
: ╔═╗ ┌─┐ ┌┐┌ ┌┬┐ ┌─┐ ┌─┐ ┌┬┐
|
|
||||||
: ║ │ │ │││ │ ├─┤ │ │
|
|
||||||
: ╚═╝ └─┘ ┘└┘ ┴ ┴ ┴ └─┘ ┴
|
|
||||||
:
|
|
||||||
: None
|
|
||||||
|
|
||||||
*** Blog List Heading
|
|
||||||
#+name: Blogs-heading-text
|
|
||||||
#+begin_src python :results output
|
|
||||||
# Enter the Text you want to be converted
|
|
||||||
text = "Blogs"
|
|
||||||
|
|
||||||
# Choose the font
|
|
||||||
font = "Roman"
|
|
||||||
from jimner import jimner
|
|
||||||
j = jimner()
|
|
||||||
|
|
||||||
print(j.get_banner_from_text(font,text))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS: Blogs-heading-text
|
|
||||||
#+begin_example
|
|
||||||
oooooooooo. oooo
|
|
||||||
`888' `Y8b `888
|
|
||||||
888 888 888 .ooooo. .oooooooo .oooo.o
|
|
||||||
888oooo888' 888 d88' `88b 888' `88b d88( "8
|
|
||||||
888 `88b 888 888 888 888 888 `"Y88b.
|
|
||||||
888 .88P 888 888 888 `88bod8P' o. )88b
|
|
||||||
o888bood8P' o888o `Y8bod8P' `8oooooo. 8""888P'
|
|
||||||
d" YD
|
|
||||||
"Y88888P'
|
|
||||||
|
|
||||||
|
|
||||||
None
|
|
||||||
#+end_example
|
|
||||||
|
|
||||||
** File Read Write functions
|
|
||||||
*** Write in the place with a given #+name tag
|
|
||||||
#+begin_src python :results silent
|
|
||||||
def write_output_to_org_file(file_path, name, output):
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
data = file.readlines()
|
|
||||||
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
for line in data:
|
|
||||||
if '#+name: ' in line and name in line:
|
|
||||||
file.write(line)
|
|
||||||
file.write(output)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
*** Read txt files
|
|
||||||
#+begin_src python
|
|
||||||
def read_file(file_path):
|
|
||||||
try:
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
file_contents = file.read()
|
|
||||||
return file_contents
|
|
||||||
except FileNotFoundError:
|
|
||||||
return "Not found"
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+RESULTS:
|
|
||||||
: None
|
|
||||||
|
|
||||||
|
|
||||||
* Administrative-scripts
|
|
||||||
** Blogs
|
|
||||||
*** Main Blog list
|
|
||||||
:PROPERTIES:
|
|
||||||
:HEADER-ARGS: python :tangle scripts/blog-table-generator.py :comments both
|
|
||||||
:END:
|
|
||||||
**** Generate Main blog list for [[file:content/blogs/blog-index.org]]
|
|
||||||
The following code block looks at all org files(except [[file:content/blogs/blog-index.org]] ) in the [[file:content/blogs/]] directory and finds there title, creation date, and last modified date and then creates an org table, then this table is stored as a string in the blog_table variable
|
|
||||||
# begin_src python :results output raw :exports results
|
|
||||||
#+name: blog-table-generator
|
|
||||||
#+begin_src python
|
|
||||||
import os
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
# path of the blog directory
|
|
||||||
blogs_directory = "./content/blogs"
|
|
||||||
|
|
||||||
|
|
||||||
# get a list of all things in blogs_directory
|
|
||||||
blog_list = os.listdir(blogs_directory)
|
|
||||||
max_lines_to_scan = 10
|
|
||||||
|
|
||||||
#Only include files which are .org and do no include the main Blog-list.org file which serves as an index
|
|
||||||
b = []
|
|
||||||
for i in range(0,len(blog_list)):
|
|
||||||
if blog_list[i].endswith(".org") and blog_list[i] != 'blog-index.org':
|
|
||||||
b.append(blog_list[i])
|
|
||||||
blog_list=b
|
|
||||||
|
|
||||||
#Sort blog files by last modified time
|
|
||||||
# blog_list.sort(key=lambda x: os.path.getmtime(blogs_directory+x),reverse=True)
|
|
||||||
|
|
||||||
# variable to store output table
|
|
||||||
blog_table = ""
|
|
||||||
|
|
||||||
#prints the heading of the list.
|
|
||||||
blog_table += ("|-\n")
|
|
||||||
blog_table += ("|Title|Last Modified|Created|\n")
|
|
||||||
|
|
||||||
titles = []
|
|
||||||
title_found = False
|
|
||||||
creation_dates = []
|
|
||||||
creation_found = False
|
|
||||||
last_modified_found = False
|
|
||||||
last_modified_dates = []
|
|
||||||
|
|
||||||
# finds the title, last modified time and creation time
|
|
||||||
for blog_no in range(0,len(blog_list)):
|
|
||||||
with open(blogs_directory +'/'+ blog_list[blog_no], "r") as file:
|
|
||||||
creation_found = False
|
|
||||||
last_modified_found = False
|
|
||||||
title_found = False
|
|
||||||
for line_no in range(max_lines_to_scan):
|
|
||||||
try:
|
|
||||||
line = str(next(file))
|
|
||||||
except Exception as e:
|
|
||||||
break
|
|
||||||
if (line.lower()).startswith('#+title') and title_found == False:
|
|
||||||
titles.append((line.split(':',1)[1]).strip())
|
|
||||||
title_found = True
|
|
||||||
elif (line.lower()).startswith('#+created') and creation_found == False:
|
|
||||||
creation_dates.append((line.split(':',1)[1]).strip())
|
|
||||||
creation_found = True
|
|
||||||
elif (line.lower()).startswith('#+last_modified') and last_modified_found == False:
|
|
||||||
last_modified_dates.append((line.split(':',1)[1]).strip())
|
|
||||||
last_modified_found = True
|
|
||||||
if title_found == True and last_modified_found == True and creation_found == True:
|
|
||||||
break
|
|
||||||
if last_modified_found == False:
|
|
||||||
last_modified_dates.append('unknown')
|
|
||||||
if creation_found == False:
|
|
||||||
creation_dates.append('unknown')
|
|
||||||
if title_found == False:
|
|
||||||
titles.append('unknown')
|
|
||||||
blog_table += ("|-\n")
|
|
||||||
|
|
||||||
def sort_multiple_lists(*args):
|
|
||||||
"""This function sorts multiple lists according to the sorting of the first list and returns the sorted lists as a tuple"""
|
|
||||||
|
|
||||||
#Extract the firstlist from the argumnts and find its length
|
|
||||||
first_list = args[0]
|
|
||||||
list_length = len(first_list)
|
|
||||||
|
|
||||||
# Group all corresponding elements into a list of tuples
|
|
||||||
tuples_list = list(zip(*args))
|
|
||||||
|
|
||||||
# Sort the tuples according to there first elements
|
|
||||||
sorted_tuples_list = sorted(tuples_list,key = lambda x: first_list.index(x[0]),reverse = False)
|
|
||||||
|
|
||||||
# Extract the sorted lists and return them
|
|
||||||
return(list(zip(*sorted_tuples_list)))
|
|
||||||
|
|
||||||
|
|
||||||
# Sort all lists according to creation_date
|
|
||||||
sorted_creation_dates,sorted_titles,sorted_last_modified_dates,sorted_blog_list = sort_multiple_lists(creation_dates,titles,last_modified_dates,blog_list)
|
|
||||||
|
|
||||||
for blog_no in range(0,len(blog_list)):
|
|
||||||
blog_table += ("|"+ '[[file:'+ sorted_blog_list[blog_no]+ ']' + '['+sorted_titles[blog_no] + ']]'+ '|' +sorted_last_modified_dates[blog_no] + '|' + sorted_creation_dates[blog_no] + '|\n')
|
|
||||||
#+end_src
|
|
||||||
**** Write the blog table into [[file:content/blogs/blog-index.org]]
|
|
||||||
#+begin_src python
|
|
||||||
def write_output_to_org_file(file_path, name, output):
|
|
||||||
erase_until_newline_after_name(file_path)
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
data = file.readlines()
|
|
||||||
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
for line in data:
|
|
||||||
if '#+name: ' in line and name in line:
|
|
||||||
file.write(line)
|
|
||||||
file.write(output)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def erase_until_newline_after_name(filename):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
|
|
||||||
with open(filename, 'w') as file:
|
|
||||||
erase = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line:
|
|
||||||
erase = True
|
|
||||||
file.write(line)
|
|
||||||
if erase:
|
|
||||||
if line == '\n':
|
|
||||||
erase = False
|
|
||||||
file.write(line)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
write_output_to_org_file( "content/blogs/blog-index.org", "blog-table-complete", blog_table)
|
|
||||||
|
|
||||||
print("Blog table generated successfully")
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** The Links table
|
|
||||||
:PROPERTIES:
|
|
||||||
:HEADER-ARGS: python :tangle scripts/heading-link-generator.py :comments both
|
|
||||||
:END:
|
|
||||||
|
|
||||||
#+name: link-list
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
| [[file:index.org][Home]] | [[file:blogs/blog-index.org][Blogs]] | [[file:about.org][About]] | [[file:FAQ.org][FAQ]] | [[file:news.org][News]] | [[file:contact.org][PGP]] | [[file:links.org][Links]] |
|
|
||||||
|------+-------+-------+-----+------+-----+-------|
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*** Read the above link-list
|
|
||||||
|
|
||||||
#+begin_src python
|
|
||||||
def read_until_newline_after_name(filename,name):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
content = ""
|
|
||||||
in_name = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line and name in line:
|
|
||||||
in_name = True
|
|
||||||
continue
|
|
||||||
|
|
||||||
if in_name:
|
|
||||||
if line == '\n':
|
|
||||||
in_name = False
|
|
||||||
else:
|
|
||||||
content += line
|
|
||||||
|
|
||||||
return(content)
|
|
||||||
|
|
||||||
def write_to_file(file_path, content):
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
file.write(content)
|
|
||||||
|
|
||||||
heading_link_list = read_until_newline_after_name('main.org','link-list')
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
*** Write the link table in all files in the root directory except [[file:main.org]]
|
|
||||||
#+begin_src python
|
|
||||||
import os
|
|
||||||
|
|
||||||
def write_output_to_org_file(file_path, name, output):
|
|
||||||
erase_until_newline_after_name(file_path,name)
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
data = file.readlines()
|
|
||||||
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
for line in data:
|
|
||||||
if '#+name: ' in line and name in line:
|
|
||||||
file.write(line)
|
|
||||||
file.write(output)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def erase_until_newline_after_name(filename,name):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
|
|
||||||
with open(filename, 'w') as file:
|
|
||||||
erase = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line and name in line:
|
|
||||||
erase = True
|
|
||||||
file.write(line)
|
|
||||||
if erase:
|
|
||||||
if line == '\n':
|
|
||||||
erase = False
|
|
||||||
file.write(line)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def read_file(file_path):
|
|
||||||
try:
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
file_contents = file.read()
|
|
||||||
return file_contents
|
|
||||||
except FileNotFoundError:
|
|
||||||
return "Not found"
|
|
||||||
|
|
||||||
directory = './content/'
|
|
||||||
for filename in os.listdir(directory):
|
|
||||||
if filename.endswith('.org') and filename != 'main.org':
|
|
||||||
file_path = os.path.join(directory, filename)
|
|
||||||
# Process the org file here
|
|
||||||
write_output_to_org_file(file_path,"link-list", heading_link_list)
|
|
||||||
print(f' Heading links added to {file_path}')
|
|
||||||
|
|
||||||
print('All heading links added')
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Onion and I2P addresses
|
|
||||||
:PROPERTIES:
|
|
||||||
:HEADER-ARGS: python :tangle scripts/generate_and_update_address_files.py :comments both
|
|
||||||
:END:
|
|
||||||
|
|
||||||
#+name: i2p-b32-address
|
|
||||||
http://dbtjoqs5jnsyq6m6r35a47jix2v4zeloz5fpxi6htwihpnv3fcxq.b32.i2p
|
|
||||||
|
|
||||||
|
|
||||||
#+name: tor-onionv3-address
|
|
||||||
http://acfc2abqv65bdiwimrx74vrlxy6eel66cjlmgqqvdekcrx7ufl3c2cad.onion
|
|
||||||
|
|
||||||
|
|
||||||
*** Write to txt files
|
|
||||||
#+begin_src python
|
|
||||||
def read_until_newline_after_name(filename,name):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
content = ""
|
|
||||||
in_name = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line and name in line:
|
|
||||||
in_name = True
|
|
||||||
continue
|
|
||||||
|
|
||||||
if in_name:
|
|
||||||
if line == '\n':
|
|
||||||
in_name = False
|
|
||||||
else:
|
|
||||||
content += line
|
|
||||||
|
|
||||||
return(content)
|
|
||||||
|
|
||||||
def write_to_file(file_path, content):
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
file.write(content)
|
|
||||||
|
|
||||||
write_to_file('content/static/i2p-b32-address.txt',read_until_newline_after_name('main.org','i2p-b32-address'))
|
|
||||||
print('content/static/i2p-b32-address.txt written')
|
|
||||||
write_to_file('content/static/tor-onionv3-address.txt',read_until_newline_after_name('main.org','tor-onionv3-address'))
|
|
||||||
print('content/static/tor-onionv3-address.txt written')
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
*** Read and write addresses to all files
|
|
||||||
#+begin_src python :results silent
|
|
||||||
import os
|
|
||||||
|
|
||||||
def write_output_to_org_file(file_path, name, output):
|
|
||||||
erase_until_newline_after_name(file_path,name)
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
data = file.readlines()
|
|
||||||
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
for line in data:
|
|
||||||
if '#+name: ' in line and name in line:
|
|
||||||
file.write(line)
|
|
||||||
file.write(output)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def erase_until_newline_after_name(filename,name):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
|
|
||||||
with open(filename, 'w') as file:
|
|
||||||
erase = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line and name in line:
|
|
||||||
erase = True
|
|
||||||
file.write(line)
|
|
||||||
if erase:
|
|
||||||
if line == '\n':
|
|
||||||
erase = False
|
|
||||||
file.write(line)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def read_file(file_path):
|
|
||||||
try:
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
file_contents = file.read()
|
|
||||||
return file_contents
|
|
||||||
except FileNotFoundError:
|
|
||||||
return "Not found"
|
|
||||||
|
|
||||||
directory = './content/'
|
|
||||||
for root,dir,filename in os.walk(directory):
|
|
||||||
for file in filename:
|
|
||||||
if file.endswith('.org') and file != 'main.org':
|
|
||||||
file_path = os.path.join(root, file)
|
|
||||||
# Process the org file here
|
|
||||||
write_output_to_org_file( file_path,"i2p-b32-address.txt", read_file('i2p-b32-address.txt'))
|
|
||||||
write_output_to_org_file( file_path,"tor-onionv3-address.txt", read_file('tor-onionv3-address.txt'))
|
|
||||||
print(f' Addresses written in {file_path}')
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* TODO Things to do
|
|
||||||
** TODO Improve css
|
|
||||||
** Put something in [[file:content/index.org]]
|
|
|
@ -1,132 +0,0 @@
|
||||||
# Generate Main blog list for [[file:content/blogs/blog-index.org]]
|
|
||||||
# The following code block looks at all org files(except [[file:content/blogs/blog-index.org]] ) in the [[file:content/blogs/]] directory and finds there title, creation date, and last modified date and then creates an org table, then this table is stored as a string in the blog_table variable
|
|
||||||
# # begin_src python :results output raw :exports results
|
|
||||||
# #+name: blog-table-generator
|
|
||||||
|
|
||||||
# [[file:../main.org::blog-table-generator][blog-table-generator]]
|
|
||||||
import os
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
# path of the blog directory
|
|
||||||
blogs_directory = "./content/blogs"
|
|
||||||
|
|
||||||
|
|
||||||
# get a list of all things in blogs_directory
|
|
||||||
blog_list = os.listdir(blogs_directory)
|
|
||||||
max_lines_to_scan = 10
|
|
||||||
|
|
||||||
#Only include files which are .org and do no include the main Blog-list.org file which serves as an index
|
|
||||||
b = []
|
|
||||||
for i in range(0,len(blog_list)):
|
|
||||||
if blog_list[i].endswith(".org") and blog_list[i] != 'blog-index.org':
|
|
||||||
b.append(blog_list[i])
|
|
||||||
blog_list=b
|
|
||||||
|
|
||||||
#Sort blog files by last modified time
|
|
||||||
# blog_list.sort(key=lambda x: os.path.getmtime(blogs_directory+x),reverse=True)
|
|
||||||
|
|
||||||
# variable to store output table
|
|
||||||
blog_table = ""
|
|
||||||
|
|
||||||
#prints the heading of the list.
|
|
||||||
blog_table += ("|-\n")
|
|
||||||
blog_table += ("|Title|Last Modified|Created|\n")
|
|
||||||
|
|
||||||
titles = []
|
|
||||||
title_found = False
|
|
||||||
creation_dates = []
|
|
||||||
creation_found = False
|
|
||||||
last_modified_found = False
|
|
||||||
last_modified_dates = []
|
|
||||||
|
|
||||||
# finds the title, last modified time and creation time
|
|
||||||
for blog_no in range(0,len(blog_list)):
|
|
||||||
with open(blogs_directory +'/'+ blog_list[blog_no], "r") as file:
|
|
||||||
creation_found = False
|
|
||||||
last_modified_found = False
|
|
||||||
title_found = False
|
|
||||||
for line_no in range(max_lines_to_scan):
|
|
||||||
try:
|
|
||||||
line = str(next(file))
|
|
||||||
except Exception as e:
|
|
||||||
break
|
|
||||||
if (line.lower()).startswith('#+title') and title_found == False:
|
|
||||||
titles.append((line.split(':',1)[1]).strip())
|
|
||||||
title_found = True
|
|
||||||
elif (line.lower()).startswith('#+created') and creation_found == False:
|
|
||||||
creation_dates.append((line.split(':',1)[1]).strip())
|
|
||||||
creation_found = True
|
|
||||||
elif (line.lower()).startswith('#+last_modified') and last_modified_found == False:
|
|
||||||
last_modified_dates.append((line.split(':',1)[1]).strip())
|
|
||||||
last_modified_found = True
|
|
||||||
if title_found == True and last_modified_found == True and creation_found == True:
|
|
||||||
break
|
|
||||||
if last_modified_found == False:
|
|
||||||
last_modified_dates.append('unknown')
|
|
||||||
if creation_found == False:
|
|
||||||
creation_dates.append('unknown')
|
|
||||||
if title_found == False:
|
|
||||||
titles.append('unknown')
|
|
||||||
blog_table += ("|-\n")
|
|
||||||
|
|
||||||
def sort_multiple_lists(*args):
|
|
||||||
"""This function sorts multiple lists according to the sorting of the first list and returns the sorted lists as a tuple"""
|
|
||||||
|
|
||||||
#Extract the firstlist from the argumnts and find its length
|
|
||||||
first_list = args[0]
|
|
||||||
list_length = len(first_list)
|
|
||||||
|
|
||||||
# Group all corresponding elements into a list of tuples
|
|
||||||
tuples_list = list(zip(*args))
|
|
||||||
|
|
||||||
# Sort the tuples according to there first elements
|
|
||||||
sorted_tuples_list = sorted(tuples_list,key = lambda x: first_list.index(x[0]),reverse = False)
|
|
||||||
|
|
||||||
# Extract the sorted lists and return them
|
|
||||||
return(list(zip(*sorted_tuples_list)))
|
|
||||||
|
|
||||||
|
|
||||||
# Sort all lists according to creation_date
|
|
||||||
sorted_creation_dates,sorted_titles,sorted_last_modified_dates,sorted_blog_list = sort_multiple_lists(creation_dates,titles,last_modified_dates,blog_list)
|
|
||||||
|
|
||||||
for blog_no in range(0,len(blog_list)):
|
|
||||||
blog_table += ("|"+ '[[file:'+ sorted_blog_list[blog_no]+ ']' + '['+sorted_titles[blog_no] + ']]'+ '|' +sorted_last_modified_dates[blog_no] + '|' + sorted_creation_dates[blog_no] + '|\n')
|
|
||||||
# blog-table-generator ends here
|
|
||||||
|
|
||||||
# Write the blog table into [[file:content/blogs/blog-index.org]]
|
|
||||||
|
|
||||||
# [[file:../main.org::*Write the blog table into \[\[file:content/blogs/blog-index.org\]\]][Write the blog table into [[file:content/blogs/blog-index.org]]:1]]
|
|
||||||
def write_output_to_org_file(file_path, name, output):
|
|
||||||
erase_until_newline_after_name(file_path)
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
data = file.readlines()
|
|
||||||
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
for line in data:
|
|
||||||
if '#+name: ' in line and name in line:
|
|
||||||
file.write(line)
|
|
||||||
file.write(output)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def erase_until_newline_after_name(filename):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
|
|
||||||
with open(filename, 'w') as file:
|
|
||||||
erase = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line:
|
|
||||||
erase = True
|
|
||||||
file.write(line)
|
|
||||||
if erase:
|
|
||||||
if line == '\n':
|
|
||||||
erase = False
|
|
||||||
file.write(line)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
write_output_to_org_file( "content/blogs/blog-index.org", "blog-table-complete", blog_table)
|
|
||||||
|
|
||||||
print("Blog table generated successfully")
|
|
||||||
# Write the blog table into [[file:content/blogs/blog-index.org]]:1 ends here
|
|
|
@ -1,84 +0,0 @@
|
||||||
# Write to txt files
|
|
||||||
|
|
||||||
# [[file:../main.org::*Write to txt files][Write to txt files:1]]
|
|
||||||
def read_until_newline_after_name(filename,name):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
content = ""
|
|
||||||
in_name = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line and name in line:
|
|
||||||
in_name = True
|
|
||||||
continue
|
|
||||||
|
|
||||||
if in_name:
|
|
||||||
if line == '\n':
|
|
||||||
in_name = False
|
|
||||||
else:
|
|
||||||
content += line
|
|
||||||
|
|
||||||
return(content)
|
|
||||||
|
|
||||||
def write_to_file(file_path, content):
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
file.write(content)
|
|
||||||
|
|
||||||
write_to_file('content/static/i2p-b32-address.txt',read_until_newline_after_name('main.org','i2p-b32-address'))
|
|
||||||
print('content/static/i2p-b32-address.txt written')
|
|
||||||
write_to_file('content/static/tor-onionv3-address.txt',read_until_newline_after_name('main.org','tor-onionv3-address'))
|
|
||||||
print('content/static/tor-onionv3-address.txt written')
|
|
||||||
# Write to txt files:1 ends here
|
|
||||||
|
|
||||||
# Read and write addresses to all files
|
|
||||||
|
|
||||||
# [[file:../main.org::*Read and write addresses to all files][Read and write addresses to all files:1]]
|
|
||||||
import os
|
|
||||||
|
|
||||||
def write_output_to_org_file(file_path, name, output):
|
|
||||||
erase_until_newline_after_name(file_path,name)
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
data = file.readlines()
|
|
||||||
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
for line in data:
|
|
||||||
if '#+name: ' in line and name in line:
|
|
||||||
file.write(line)
|
|
||||||
file.write(output)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def erase_until_newline_after_name(filename,name):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
|
|
||||||
with open(filename, 'w') as file:
|
|
||||||
erase = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line and name in line:
|
|
||||||
erase = True
|
|
||||||
file.write(line)
|
|
||||||
if erase:
|
|
||||||
if line == '\n':
|
|
||||||
erase = False
|
|
||||||
file.write(line)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def read_file(file_path):
|
|
||||||
try:
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
file_contents = file.read()
|
|
||||||
return file_contents
|
|
||||||
except FileNotFoundError:
|
|
||||||
return "Not found"
|
|
||||||
|
|
||||||
directory = './content/'
|
|
||||||
for root,dir,filename in os.walk(directory):
|
|
||||||
for file in filename:
|
|
||||||
if file.endswith('.org') and file != 'main.org':
|
|
||||||
file_path = os.path.join(root, file)
|
|
||||||
# Process the org file here
|
|
||||||
write_output_to_org_file( file_path,"i2p-b32-address.txt", read_file('i2p-b32-address.txt'))
|
|
||||||
write_output_to_org_file( file_path,"tor-onionv3-address.txt", read_file('tor-onionv3-address.txt'))
|
|
||||||
print(f' Addresses written in {file_path}')
|
|
||||||
# Read and write addresses to all files:1 ends here
|
|
|
@ -1,82 +0,0 @@
|
||||||
# Read the above link-list
|
|
||||||
|
|
||||||
|
|
||||||
# [[file:../main.org::*Read the above link-list][Read the above link-list:1]]
|
|
||||||
def read_until_newline_after_name(filename,name):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
content = ""
|
|
||||||
in_name = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line and name in line:
|
|
||||||
in_name = True
|
|
||||||
continue
|
|
||||||
|
|
||||||
if in_name:
|
|
||||||
if line == '\n':
|
|
||||||
in_name = False
|
|
||||||
else:
|
|
||||||
content += line
|
|
||||||
|
|
||||||
return(content)
|
|
||||||
|
|
||||||
def write_to_file(file_path, content):
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
file.write(content)
|
|
||||||
|
|
||||||
heading_link_list = read_until_newline_after_name('main.org','link-list')
|
|
||||||
# Read the above link-list:1 ends here
|
|
||||||
|
|
||||||
# Write the link table in all files in the root directory except [[file:main.org]]
|
|
||||||
|
|
||||||
# [[file:../main.org::*Write the link table in all files in the root directory except \[\[file:main.org\]\]][Write the link table in all files in the root directory except [[file:main.org]]:1]]
|
|
||||||
import os
|
|
||||||
|
|
||||||
def write_output_to_org_file(file_path, name, output):
|
|
||||||
erase_until_newline_after_name(file_path,name)
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
data = file.readlines()
|
|
||||||
|
|
||||||
with open(file_path, 'w') as file:
|
|
||||||
for line in data:
|
|
||||||
if '#+name: ' in line and name in line:
|
|
||||||
file.write(line)
|
|
||||||
file.write(output)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def erase_until_newline_after_name(filename,name):
|
|
||||||
with open(filename, 'r') as file:
|
|
||||||
lines = file.readlines()
|
|
||||||
|
|
||||||
with open(filename, 'w') as file:
|
|
||||||
erase = False
|
|
||||||
for line in lines:
|
|
||||||
if "#+name" in line and name in line:
|
|
||||||
erase = True
|
|
||||||
file.write(line)
|
|
||||||
if erase:
|
|
||||||
if line == '\n':
|
|
||||||
erase = False
|
|
||||||
file.write(line)
|
|
||||||
else:
|
|
||||||
file.write(line)
|
|
||||||
|
|
||||||
def read_file(file_path):
|
|
||||||
try:
|
|
||||||
with open(file_path, 'r') as file:
|
|
||||||
file_contents = file.read()
|
|
||||||
return file_contents
|
|
||||||
except FileNotFoundError:
|
|
||||||
return "Not found"
|
|
||||||
|
|
||||||
directory = './content/'
|
|
||||||
for filename in os.listdir(directory):
|
|
||||||
if filename.endswith('.org') and filename != 'main.org':
|
|
||||||
file_path = os.path.join(directory, filename)
|
|
||||||
# Process the org file here
|
|
||||||
write_output_to_org_file(file_path,"link-list", heading_link_list)
|
|
||||||
print(f' Heading links added to {file_path}')
|
|
||||||
|
|
||||||
print('All heading links added')
|
|
||||||
# Write the link table in all files in the root directory except [[file:main.org]]:1 ends here
|
|
Loading…
Add table
Reference in a new issue