diff --git a/.gitignore b/.gitignore index c501d61..fe0b780 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /public/ /.packages/ +/.org-cache/ diff --git a/README.md b/README.md index d62adcb..3097c30 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # cosmicpirates.space -This is the source code of the cosmicpirates.space website +This is the source code of the cosmicflow website ## 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 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 +ssh -L 3000:localhost:3000 fluid@cosmicflow.space ``` ### Step 2: Open Gitea on your Browser Open http://localhost:3000/ in your browser diff --git a/assets/css/code.css b/assets/css/code.css new file mode 100644 index 0000000..ef5313c --- /dev/null +++ b/assets/css/code.css @@ -0,0 +1,1051 @@ +body { + color: #eeffff; + background-color: #292d3e; +} +.org-ansi-color-black { + /* ansi-color-black */ + color: #292d3e; + background-color: #292d3e; +} +.org-ansi-color-blue { + /* ansi-color-blue */ + color: #82aaff; + background-color: #82aaff; +} +.org-ansi-color-bright-black { + /* ansi-color-bright-black */ + color: #1c1f2b; + background-color: #232635; +} +.org-ansi-color-bright-blue { + /* ansi-color-bright-blue */ + color: #94b6ff; + background-color: #94b6ff; +} +.org-ansi-color-bright-cyan { + /* ansi-color-bright-cyan */ + color: #9ae2ff; + background-color: #9ae2ff; +} +.org-ansi-color-bright-green { + /* ansi-color-bright-green */ + color: #cbeb9e; + background-color: #cbeb9e; +} +.org-ansi-color-bright-magenta { + /* ansi-color-bright-magenta */ + color: #cfa2ed; + background-color: #cfa2ed; +} +.org-ansi-color-bright-red { + /* ansi-color-bright-red */ + color: #ff6c85; + background-color: #ff6c85; +} +.org-ansi-color-bright-white { + /* ansi-color-bright-white */ + color: #a6accd; + background-color: #a6accd; +} +.org-ansi-color-bright-yellow { + /* ansi-color-bright-yellow */ + color: #ffd281; + background-color: #ffd281; +} +.org-ansi-color-cyan { + /* ansi-color-cyan */ + color: #89ddff; + background-color: #89ddff; +} +.org-ansi-color-faint { +} +.org-ansi-color-fast-blink { +} +.org-ansi-color-green { + /* ansi-color-green */ + color: #c3e88d; + background-color: #c3e88d; +} +.org-ansi-color-inverse { +} +.org-ansi-color-magenta { + /* ansi-color-magenta */ + color: #c792ea; + background-color: #c792ea; +} +.org-ansi-color-red { + /* ansi-color-red */ + color: #ff5370; + background-color: #ff5370; +} +.org-ansi-color-slow-blink { +} +.org-ansi-color-white { + /* ansi-color-white */ + color: #eeffff; + background-color: #eeffff; +} +.org-ansi-color-yellow { + /* ansi-color-yellow */ + color: #ffcb6b; + background-color: #ffcb6b; +} +.org-bold { + /* bold */ + font-weight: bold; +} +.org-border { +} +.org-buffer-menu-buffer { + /* buffer-menu-buffer */ + font-weight: bold; +} +.org-builtin { + /* font-lock-builtin-face */ + color: #82aaff; +} +.org-button { + /* button */ + color: #c792ea; + font-weight: bold; + text-decoration: underline; +} +.org-calendar-month-header { + /* calendar-month-header */ + color: #82aaff; +} +.org-calendar-today { + /* calendar-today */ + text-decoration: underline; +} +.org-calendar-weekday-header { + /* calendar-weekday-header */ + color: #f78c6c; +} +.org-calendar-weekend-header { + /* calendar-weekend-header */ + color: #676e95; +} +.org-child-frame-border { +} +.org-comint-highlight-input { + /* comint-highlight-input */ + font-weight: bold; +} +.org-comint-highlight-prompt { + /* comint-highlight-prompt */ + color: #c792ea; +} +.org-comment { + /* font-lock-comment-face */ + color: #676e95; +} +.org-comment-delimiter { + /* font-lock-comment-delimiter-face */ + color: #676e95; +} +.org-completions-common-part { + /* completions-common-part */ + color: #add8e6; +} +.org-completions-first-difference { + /* completions-first-difference */ + font-weight: bold; +} +.org-completions-group-separator { + /* completions-group-separator */ + color: #676e95; + text-decoration: line-through; +} +.org-completions-group-title { + /* completions-group-title */ + color: #676e95; + font-style: italic; +} +.org-constant { + /* font-lock-constant-face */ + color: #f78c6c; +} +.org-cursor { + /* cursor */ + background-color: #c792ea; +} +.org-diary { + /* diary */ + color: #ffff00; +} +.org-doc { + /* font-lock-doc-face */ + color: #8d92af; +} +.org-doc-markup { + /* font-lock-doc-markup-face */ + color: #f78c6c; +} +.org-eldoc-highlight-function-argument { + /* eldoc-highlight-function-argument */ + font-weight: bold; +} +.org-elisp-shorthand-font-lock { + /* elisp-shorthand-font-lock-face */ + color: #00ffff; +} +.org-error { + /* error */ + color: #ff5370; +} +.org-escape-glyph { + /* escape-glyph */ + color: #89ddff; +} +.org-file-name-shadow { + /* file-name-shadow */ + color: #676e95; +} +.org-fill-column-indicator { + /* fill-column-indicator */ + color: #676e95; +} +.org-fixed-pitch { +} +.org-fixed-pitch-serif { +} +.org-fringe { + /* fringe */ + color: #4e5579; + background-color: #292d3e; +} +.org-function-name { + /* font-lock-function-name-face */ + color: #82aaff; +} +.org-glyphless-char { + /* glyphless-char */ + font-size: 60%; +} +.org-header-line { + /* header-line */ + color: #a6accd; + background-color: #232635; +} +.org-header-line-highlight { + /* header-line-highlight */ + color: #1c1f2b; + background-color: #c792ea; +} +.org-help-argument-name { + /* help-argument-name */ + font-style: italic; +} +.org-help-for-help-header { + /* help-for-help-header */ + font-size: 126%; +} +.org-help-key-binding { + /* help-key-binding */ + color: #add8e6; + background-color: #303030; +} +.org-highlight { + /* highlight */ + color: #1c1f2b; + background-color: #c792ea; +} +.org-holiday { + /* holiday */ + background-color: #8b4513; +} +.org-homoglyph { + /* homoglyph */ + color: #00ffff; +} +.org-internal-border { +} +.org-isearch { + /* isearch */ + color: #eeffff; + background-color: #4e5579; + font-weight: bold; +} +.org-isearch-fail { + /* isearch-fail */ + color: #1c1f2b; + background-color: #ff5370; + font-weight: bold; +} +.org-isearch-group-1 { + /* isearch-group-1 */ + color: #8b2323; + background-color: #ff82ab; +} +.org-isearch-group-2 { + /* isearch-group-2 */ + color: #8b2323; + background-color: #cd6889; +} +.org-italic { + /* italic */ + font-style: italic; +} +.org-keyword { + /* font-lock-keyword-face */ + color: #89ddff; +} +.org-lazy-highlight { + /* lazy-highlight */ + color: #eeffff; + background-color: #4e5579; + font-weight: bold; +} +.org-line-number { + /* line-number */ + color: #676e95; + background-color: #292d3e; +} +.org-line-number-major-tick { + /* line-number-major-tick */ + background-color: #bfbfbf; + font-weight: bold; +} +.org-line-number-minor-tick { + /* line-number-minor-tick */ + background-color: #8c8c8c; + font-weight: bold; +} +.org-link { + /* link */ + color: #c792ea; + font-weight: bold; + text-decoration: underline; +} +.org-link-visited { + /* link-visited */ + color: #ee82ee; + font-weight: bold; + text-decoration: underline; +} +.org-match { + /* match */ + color: #c3e88d; + background-color: #1c1f2b; + font-weight: bold; +} +.org-menu { +} +.org-minibuffer-prompt { + /* minibuffer-prompt */ + color: #c792ea; +} +.org-mode-line { + /* mode-line */ + color: #a6accd; + background-color: #232635; +} +.org-mode-line-buffer-id { + /* mode-line-buffer-id */ + font-weight: bold; +} +.org-mode-line-emphasis { + /* mode-line-emphasis */ + color: #c792ea; +} +.org-mode-line-highlight { + /* mode-line-highlight */ + color: #1c1f2b; + background-color: #c792ea; +} +.org-mode-line-inactive { + /* mode-line-inactive */ + color: #676e95; + background-color: #282c3d; +} +.org-mouse { +} +.org-mouse-drag-and-drop-region { + /* mouse-drag-and-drop-region */ + background-color: #3c435e; +} +.org-negation-char { + /* font-lock-negation-char-face */ + color: #89ddff; + font-weight: bold; +} +.org-next-error { + /* next-error */ + background-color: #3c435e; +} +.org-next-error-message { + /* next-error-message */ + color: #1c1f2b; + background-color: #c792ea; +} +.org-nobreak-hyphen { + /* nobreak-hyphen */ + color: #00ffff; +} +.org-nobreak-space { + /* nobreak-space */ + color: #89ddff; + text-decoration: underline; +} +.org-org-agenda-calendar-event { + /* org-agenda-calendar-event */ + color: #eeffff; + background-color: #292d3e; +} +.org-org-agenda-calendar-sexp { + /* org-agenda-calendar-sexp */ + color: #eeffff; + background-color: #292d3e; +} +.org-org-agenda-clocking { + /* org-agenda-clocking */ + background-color: #3a4664; +} +.org-org-agenda-column-dateline { + /* org-agenda-column-dateline */ + background-color: #4d4d4d; +} +.org-org-agenda-current-time { + /* org-agenda-current-time */ + color: #676e95; +} +.org-org-agenda-date { + /* org-agenda-date */ + color: #bb80b3; +} +.org-org-agenda-date-today { + /* org-agenda-date-today */ + color: #d6b2d1; +} +.org-org-agenda-date-weekend { + /* org-agenda-date-weekend */ + color: #704c6b; +} +.org-org-agenda-date-weekend-today { + /* org-agenda-date-weekend-today */ + color: #d6b2d1; +} +.org-org-agenda-diary { + /* org-agenda-diary */ + color: #eeffff; + background-color: #292d3e; +} +.org-org-agenda-dimmed-todo { + /* org-agenda-dimmed-todo-face */ + color: #676e95; +} +.org-org-agenda-done { + /* org-agenda-done */ + color: #676e95; + font-weight: bold; +} +.org-org-agenda-filter-category { + /* org-agenda-filter-category */ + color: #a6accd; + background-color: #232635; +} +.org-org-agenda-filter-effort { + /* org-agenda-filter-effort */ + color: #a6accd; + background-color: #232635; +} +.org-org-agenda-filter-regexp { + /* org-agenda-filter-regexp */ + color: #a6accd; + background-color: #232635; +} +.org-org-agenda-filter-tags { + /* org-agenda-filter-tags */ + color: #a6accd; + background-color: #232635; +} +.org-org-agenda-restriction-lock { + /* org-agenda-restriction-lock */ + background-color: #1c1c1c; +} +.org-org-agenda-structure { + /* org-agenda-structure */ + color: #eeffff; +} +.org-org-agenda-structure-secondary { + /* org-agenda-structure-secondary */ + color: #eeffff; +} +.org-org-archived { + /* org-archived */ + color: #8d92af; +} +.org-org-block { + /* org-block */ + background-color: #232635; +} +.org-org-block-begin-line { + /* org-block-begin-line */ + color: #676e95; + background-color: #232635; +} +.org-org-block-end-line { + /* org-block-end-line */ + color: #676e95; + background-color: #232635; +} +.org-org-checkbox { + /* org-checkbox */ + color: #c3e88d; + font-weight: bold; +} +.org-org-checkbox-statistics-done { + /* org-checkbox-statistics-done */ + color: #676e95; + font-weight: bold; +} +.org-org-checkbox-statistics-todo { + /* org-checkbox-statistics-todo */ + color: #c3e88d; + font-weight: bold; +} +.org-org-cite { + /* org-cite */ + color: #55c0b8; +} +.org-org-cite-key { + /* org-cite-key */ + color: #88d4d0; + text-decoration: underline; +} +.org-org-clock-overlay { + /* org-clock-overlay */ + color: #ffffff; + background-color: #4a708b; +} +.org-org-code { + /* org-code */ + color: #f78c6c; + background-color: #232635; +} +.org-org-column { + /* org-column */ + background-color: #4d4d4d; +} +.org-org-column-title { + /* org-column-title */ + background-color: #4d4d4d; + font-weight: bold; + text-decoration: underline; +} +.org-org-date { + /* org-date */ + color: #ffcb6b; +} +.org-org-date-selected { + /* org-date-selected */ + color: #ffc0cb; +} +.org-org-default { +} +.org-org-dispatcher-highlight { + /* org-dispatcher-highlight */ + color: #ffd700; + background-color: #333333; + font-weight: bold; +} +.org-org-document-info { + /* org-document-info */ + color: #82aaff; +} +.org-org-document-info-keyword { + /* org-document-info-keyword */ + color: #676e95; +} +.org-org-document-title { + /* org-document-title */ + color: #82aaff; + font-weight: bold; +} +.org-org-done { + /* org-done */ + color: #676e95; + font-weight: bold; +} +.org-org-drawer { + /* org-drawer */ + color: #676e95; +} +.org-org-ellipsis { + /* org-ellipsis */ + color: #676e95; +} +.org-org-footnote { + /* org-footnote */ + color: #f78c6c; +} +.org-org-formula { + /* org-formula */ + color: #89ddff; +} +.org-org-headline-done { + /* org-headline-done */ + color: #676e95; +} +.org-org-headline-todo { + /* org-headline-todo */ + color: #eea9b8; +} +.org-org-hide { + /* org-hide */ + color: #292d3e; +} +.org-org-imminent-deadline { + /* org-imminent-deadline */ + color: #ffcb6b; +} +.org-org-inline-src-block { + /* org-inline-src-block */ + background-color: #232635; +} +.org-org-latex-and-related { + /* org-latex-and-related */ + color: #a6accd; + font-weight: bold; +} +.org-org-level-1 { + /* org-level-1 */ + color: #82aaff; + font-weight: bold; +} +.org-org-level-2 { + /* org-level-2 */ + color: #c792ea; + font-weight: bold; +} +.org-org-level-3 { + /* org-level-3 */ + color: #bb80b3; + font-weight: bold; +} +.org-org-level-4 { + /* org-level-4 */ + color: #a1bfff; + font-weight: bold; +} +.org-org-level-5 { + /* org-level-5 */ + color: #d5adef; + font-weight: bold; +} +.org-org-level-6 { + /* org-level-6 */ + color: #c0d4ff; + font-weight: bold; +} +.org-org-level-7 { + /* org-level-7 */ + color: #e3c8f4; + font-weight: bold; +} +.org-org-level-8 { + /* org-level-8 */ + color: #e6eeff; + font-weight: bold; +} +.org-org-link { + /* org-link */ + color: #c792ea; + font-weight: bold; + text-decoration: underline; +} +.org-org-list-dt { + /* org-list-dt */ + color: #c792ea; +} +.org-org-macro { + /* org-macro */ + color: #a6accd; + font-weight: bold; +} +.org-org-meta-line { + /* org-meta-line */ + color: #8d92af; +} +.org-org-mode-line-clock { + /* org-mode-line-clock */ + color: #a6accd; + background-color: #232635; +} +.org-org-mode-line-clock-overrun { + /* org-mode-line-clock-overrun */ + color: #a6accd; + background-color: #ff0000; +} +.org-org-priority { + /* org-priority */ + color: #ff5370; +} +.org-org-property-value { + /* org-property-value */ + color: #8d92af; +} +.org-org-quote { + /* org-quote */ + background-color: #232635; + font-style: italic; +} +.org-org-scheduled { + /* org-scheduled */ + color: #eeffff; +} +.org-org-scheduled-previously { + /* org-scheduled-previously */ + color: #a6accd; +} +.org-org-scheduled-today { + /* org-scheduled-today */ + color: #717cb4; +} +.org-org-sexp-date { + /* org-sexp-date */ + color: #eeffff; +} +.org-org-special-keyword { + /* org-special-keyword */ + color: #8d92af; +} +.org-org-table { + /* org-table */ + color: #bb80b3; +} +.org-org-table-header { + /* org-table-header */ + color: #000000; + background-color: #d3d3d3; +} +.org-org-tag { + /* org-tag */ + color: #8d92af; +} +.org-org-tag-group { + /* org-tag-group */ + color: #8d92af; +} +.org-org-target { + /* org-target */ + text-decoration: underline; +} +.org-org-time-grid { + /* org-time-grid */ + color: #676e95; +} +.org-org-todo { + /* org-todo */ + color: #c3e88d; + font-weight: bold; +} +.org-org-upcoming-deadline { + /* org-upcoming-deadline */ + color: #c6d5d8; +} +.org-org-upcoming-distant-deadline { + /* org-upcoming-distant-deadline */ + color: #8b969e; +} +.org-org-verbatim { + /* org-verbatim */ + color: #c3e88d; +} +.org-org-verse { + /* org-verse */ + background-color: #232635; +} +.org-org-warning { + /* org-warning */ + color: #ffcb6b; +} +.org-outline-1 { + /* outline-1 */ + color: #82aaff; + font-weight: bold; +} +.org-outline-2 { + /* outline-2 */ + color: #c792ea; + font-weight: bold; +} +.org-outline-3 { + /* outline-3 */ + color: #bb80b3; + font-weight: bold; +} +.org-outline-4 { + /* outline-4 */ + color: #a1bfff; + font-weight: bold; +} +.org-outline-5 { + /* outline-5 */ + color: #d5adef; + font-weight: bold; +} +.org-outline-6 { + /* outline-6 */ + color: #c0d4ff; + font-weight: bold; +} +.org-outline-7 { + /* outline-7 */ + color: #e3c8f4; + font-weight: bold; +} +.org-outline-8 { + /* outline-8 */ + color: #e6eeff; + font-weight: bold; +} +.org-preprocessor { + /* font-lock-preprocessor-face */ + color: #89ddff; + font-weight: bold; +} +.org-query-replace { + /* query-replace */ + color: #eeffff; + background-color: #4e5579; + font-weight: bold; +} +.org-read-multiple-choice { + /* read-multiple-choice-face */ + font-weight: bold; + text-decoration: underline; +} +.org-regexp-grouping-backslash { + /* font-lock-regexp-grouping-backslash */ + color: #89ddff; + font-weight: bold; +} +.org-regexp-grouping-construct { + /* font-lock-regexp-grouping-construct */ + color: #89ddff; + font-weight: bold; +} +.org-region { + /* region */ + background-color: #3c435e; +} +.org-scroll-bar { + /* scroll-bar */ + color: #ffffff; +} +.org-secondary-selection { + /* secondary-selection */ + background-color: #676e95; +} +.org-separator-line { + /* separator-line */ + background-color: #505050; + font-size: 10%; +} +.org-shadow { + /* shadow */ + color: #676e95; +} +.org-show-paren-match { + /* show-paren-match */ + color: #ff5370; + background-color: #1c1f2b; +} +.org-show-paren-match-expression { + /* show-paren-match-expression */ + color: #ff5370; + background-color: #1c1f2b; +} +.org-show-paren-mismatch { + /* show-paren-mismatch */ + color: #1c1f2b; + background-color: #ff5370; +} +.org-string { + /* font-lock-string-face */ + color: #c3e88d; +} +.org-success { + /* success */ + color: #c3e88d; +} +.org-tab-bar { + /* tab-bar */ + color: #242837; + background-color: #242837; +} +.org-tab-bar-tab { + /* tab-bar-tab */ + color: #eeffff; + background-color: #292d3e; +} +.org-tab-bar-tab-group-current { + /* tab-bar-tab-group-current */ + color: #eeffff; + background-color: #292d3e; + font-weight: bold; +} +.org-tab-bar-tab-inactive { + /* tab-bar-tab-inactive */ + color: #bfc7d5; + background-color: #242837; +} +.org-tab-line { + /* tab-line */ + color: #242837; + background-color: #242837; +} +.org-tab-line-close-highlight { + /* tab-line-close-highlight */ + color: #c792ea; +} +.org-tab-line-highlight { + /* tab-line-highlight */ + color: #eeffff; + background-color: #292d3e; +} +.org-tab-line-tab { + /* tab-line-tab */ + color: #eeffff; + background-color: #292d3e; +} +.org-tab-line-tab-current { + /* tab-line-tab-current */ + color: #eeffff; + background-color: #292d3e; +} +.org-tab-line-tab-group { + /* tab-line-tab-group */ + color: #242837; + background-color: #242837; +} +.org-tab-line-tab-inactive { + /* tab-line-tab-inactive */ + color: #bfc7d5; + background-color: #242837; +} +.org-tab-line-tab-inactive-alternate { + /* tab-line-tab-inactive-alternate */ + color: #bfc7d5; + background-color: #242837; +} +.org-tab-line-tab-modified { + /* tab-line-tab-modified */ + color: #8d92af; +} +.org-tab-line-tab-special { + /* tab-line-tab-special */ + font-style: italic; +} +.org-table-cell { + /* table-cell */ + color: #e5e5e5; + background-color: #0000ff; +} +.org-tabulated-list-fake-header { + /* tabulated-list-fake-header */ + font-weight: bold; + text-decoration: underline; + text-decoration: overline; +} +.org-tool-bar { + /* tool-bar */ + color: #000000; + background-color: #bfbfbf; +} +.org-tooltip { + /* tooltip */ + color: #eeffff; + background-color: #1c202c; +} +.org-trailing-whitespace { + /* trailing-whitespace */ + background-color: #ff5370; +} +.org-tty-menu-disabled { + /* tty-menu-disabled-face */ + color: #d3d3d3; + background-color: #0000ff; +} +.org-tty-menu-enabled { + /* tty-menu-enabled-face */ + color: #ffff00; + background-color: #0000ff; + font-weight: bold; +} +.org-tty-menu-selected { + /* tty-menu-selected-face */ + background-color: #ff0000; +} +.org-type { + /* font-lock-type-face */ + color: #c792ea; +} +.org-underline { + /* underline */ + text-decoration: underline; +} +.org-variable-name { + /* font-lock-variable-name-face */ + color: #ffcb6b; +} +.org-variable-pitch { +} +.org-vc-conflict-state { +} +.org-vc-edited-state { +} +.org-vc-locally-added-state { +} +.org-vc-locked-state { +} +.org-vc-missing-state { +} +.org-vc-needs-update-state { +} +.org-vc-removed-state { +} +.org-vc-state-base { +} +.org-vc-up-to-date-state { +} +.org-vertical-border { + /* vertical-border */ + color: #232635; + background-color: #232635; +} +.org-warning { + /* warning */ + color: #ffcb6b; +} +.org-warning-1 { + /* font-lock-warning-face */ + color: #ffcb6b; +} +.org-window-divider { + /* window-divider */ + color: #232635; + background-color: #232635; +} +.org-window-divider-first-pixel { + /* window-divider-first-pixel */ + color: #232635; + background-color: #232635; +} +.org-window-divider-last-pixel { + /* window-divider-last-pixel */ + color: #232635; + background-color: #232635; +} + +a { + color: inherit; + background-color: inherit; + font: inherit; + text-decoration: inherit; +} +a:hover { + text-decoration: underline; +} diff --git a/assets/css/site.css b/assets/css/site.css new file mode 100644 index 0000000..6186ce6 --- /dev/null +++ b/assets/css/site.css @@ -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 { +} diff --git a/assets/fonts/iosevka-aile/iosevka-aile.css b/assets/fonts/iosevka-aile/iosevka-aile.css new file mode 100644 index 0000000..cd5088d --- /dev/null +++ b/assets/fonts/iosevka-aile/iosevka-aile.css @@ -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"); +} diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-bold.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-bold.ttf new file mode 100644 index 0000000..faa3d04 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-bold.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-bolditalic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-bolditalic.ttf new file mode 100644 index 0000000..e58bf1c Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-bolditalic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-boldoblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-boldoblique.ttf new file mode 100644 index 0000000..8b8ab27 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-boldoblique.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabold.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabold.ttf new file mode 100644 index 0000000..8480520 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabold.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabolditalic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabolditalic.ttf new file mode 100644 index 0000000..da4653e Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extrabolditalic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-extraboldoblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extraboldoblique.ttf new file mode 100644 index 0000000..91cd30c Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extraboldoblique.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralight.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralight.ttf new file mode 100644 index 0000000..b923a59 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralight.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightitalic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightitalic.ttf new file mode 100644 index 0000000..5d04b9a Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightitalic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightoblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightoblique.ttf new file mode 100644 index 0000000..00aadc4 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-extralightoblique.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavy.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavy.ttf new file mode 100644 index 0000000..95a98f6 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavy.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyitalic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyitalic.ttf new file mode 100644 index 0000000..a15ca6f Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyitalic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyoblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyoblique.ttf new file mode 100644 index 0000000..eee87b9 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-heavyoblique.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-italic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-italic.ttf new file mode 100644 index 0000000..fcc3587 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-italic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-light.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-light.ttf new file mode 100644 index 0000000..7af9e3e Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-light.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-lightitalic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-lightitalic.ttf new file mode 100644 index 0000000..4827385 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-lightitalic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-lightoblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-lightoblique.ttf new file mode 100644 index 0000000..528b725 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-lightoblique.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-medium.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-medium.ttf new file mode 100644 index 0000000..077a150 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-medium.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumitalic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumitalic.ttf new file mode 100644 index 0000000..640110d Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumitalic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumoblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumoblique.ttf new file mode 100644 index 0000000..4607131 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-mediumoblique.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-oblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-oblique.ttf new file mode 100644 index 0000000..024a67f Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-oblique.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-regular.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-regular.ttf new file mode 100644 index 0000000..c7063db Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-regular.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-semibold.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-semibold.ttf new file mode 100644 index 0000000..3e262a3 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-semibold.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-semibolditalic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-semibolditalic.ttf new file mode 100644 index 0000000..d2ea895 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-semibolditalic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-semiboldoblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-semiboldoblique.ttf new file mode 100644 index 0000000..ffecba9 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-semiboldoblique.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-thin.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-thin.ttf new file mode 100644 index 0000000..e291878 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-thin.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-thinitalic.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-thinitalic.ttf new file mode 100644 index 0000000..05225d0 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-thinitalic.ttf differ diff --git a/assets/fonts/iosevka-aile/ttf/iosevka-aile-thinoblique.ttf b/assets/fonts/iosevka-aile/ttf/iosevka-aile-thinoblique.ttf new file mode 100644 index 0000000..9dfd123 Binary files /dev/null and b/assets/fonts/iosevka-aile/ttf/iosevka-aile-thinoblique.ttf differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-bold.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-bold.woff2 new file mode 100644 index 0000000..ad25ad8 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-bold.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-bolditalic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-bolditalic.woff2 new file mode 100644 index 0000000..0fdc57c Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-bolditalic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-boldoblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-boldoblique.woff2 new file mode 100644 index 0000000..ab4e3ec Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-boldoblique.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-extrabold.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extrabold.woff2 new file mode 100644 index 0000000..1fadc61 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extrabold.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-extrabolditalic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extrabolditalic.woff2 new file mode 100644 index 0000000..8851ec1 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extrabolditalic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-extraboldoblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extraboldoblique.woff2 new file mode 100644 index 0000000..eadb8fc Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extraboldoblique.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralight.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralight.woff2 new file mode 100644 index 0000000..1b0c549 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralight.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralightitalic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralightitalic.woff2 new file mode 100644 index 0000000..8b10961 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralightitalic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralightoblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralightoblique.woff2 new file mode 100644 index 0000000..169ba05 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-extralightoblique.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavy.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavy.woff2 new file mode 100644 index 0000000..6ea17a0 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavy.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyitalic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyitalic.woff2 new file mode 100644 index 0000000..cbb6f2c Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyitalic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyoblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyoblique.woff2 new file mode 100644 index 0000000..4f07643 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-heavyoblique.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-italic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-italic.woff2 new file mode 100644 index 0000000..da82f61 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-italic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-light.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-light.woff2 new file mode 100644 index 0000000..5575584 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-light.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-lightitalic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-lightitalic.woff2 new file mode 100644 index 0000000..64713be Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-lightitalic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-lightoblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-lightoblique.woff2 new file mode 100644 index 0000000..1a70a8e Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-lightoblique.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-medium.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-medium.woff2 new file mode 100644 index 0000000..3de00b6 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-medium.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumitalic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumitalic.woff2 new file mode 100644 index 0000000..dfb4221 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumitalic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumoblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumoblique.woff2 new file mode 100644 index 0000000..3314109 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-mediumoblique.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-oblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-oblique.woff2 new file mode 100644 index 0000000..9c6ab02 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-oblique.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-regular.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-regular.woff2 new file mode 100644 index 0000000..ee3a8e3 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-regular.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-semibold.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-semibold.woff2 new file mode 100644 index 0000000..82ef99f Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-semibold.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-semibolditalic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-semibolditalic.woff2 new file mode 100644 index 0000000..9f2377f Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-semibolditalic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-semiboldoblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-semiboldoblique.woff2 new file mode 100644 index 0000000..30b7bb3 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-semiboldoblique.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-thin.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-thin.woff2 new file mode 100644 index 0000000..8d1c25a Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-thin.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-thinitalic.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-thinitalic.woff2 new file mode 100644 index 0000000..33106c3 Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-thinitalic.woff2 differ diff --git a/assets/fonts/iosevka-aile/woff2/iosevka-aile-thinoblique.woff2 b/assets/fonts/iosevka-aile/woff2/iosevka-aile-thinoblique.woff2 new file mode 100644 index 0000000..d3ac50b Binary files /dev/null and b/assets/fonts/iosevka-aile/woff2/iosevka-aile-thinoblique.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-Bold.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-Bold.woff2 new file mode 100644 index 0000000..07fe5d7 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-Bold.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-BoldItalic.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-BoldItalic.woff2 new file mode 100644 index 0000000..57263ef Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-BoldItalic.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.woff2 new file mode 100644 index 0000000..9ba04e6 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBoldItalic.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..25b16c9 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraBoldItalic.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLight.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLight.woff2 new file mode 100644 index 0000000..0fcf808 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLight.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLightItalic.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLightItalic.woff2 new file mode 100644 index 0000000..2101028 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-ExtraLightItalic.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-Italic.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-Italic.woff2 new file mode 100644 index 0000000..cf9e8ef Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-Italic.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-Light.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-Light.woff2 new file mode 100644 index 0000000..a456787 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-Light.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-LightItalic.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-LightItalic.woff2 new file mode 100644 index 0000000..209ce0a Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-LightItalic.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000..b4d9438 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-MediumItalic.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-MediumItalic.woff2 new file mode 100644 index 0000000..3ac249b Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-MediumItalic.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000..cc9a1ae Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-Thin.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-Thin.woff2 new file mode 100644 index 0000000..70e9c48 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-Thin.woff2 differ diff --git a/assets/fonts/jetbrains-mono/JetBrainsMono-ThinItalic.woff2 b/assets/fonts/jetbrains-mono/JetBrainsMono-ThinItalic.woff2 new file mode 100644 index 0000000..dc9f741 Binary files /dev/null and b/assets/fonts/jetbrains-mono/JetBrainsMono-ThinItalic.woff2 differ diff --git a/assets/fonts/jetbrains-mono/jetbrains-mono.css b/assets/fonts/jetbrains-mono/jetbrains-mono.css new file mode 100644 index 0000000..21b614e --- /dev/null +++ b/assets/fonts/jetbrains-mono/jetbrains-mono.css @@ -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; +} diff --git a/assets/pics/CCLogoColorPop1.gif b/assets/pics/CCLogoColorPop1.gif new file mode 100644 index 0000000..6d7ce35 Binary files /dev/null and b/assets/pics/CCLogoColorPop1.gif differ diff --git a/assets/pics/header_bg.png b/assets/pics/header_bg.png new file mode 100644 index 0000000..f43d2b9 Binary files /dev/null and b/assets/pics/header_bg.png differ diff --git a/assets/pics/sc_logo.png b/assets/pics/sc_logo.png new file mode 100644 index 0000000..7fb36ea Binary files /dev/null and b/assets/pics/sc_logo.png differ diff --git a/assets/pics/sc_logo_1.png b/assets/pics/sc_logo_1.png new file mode 100644 index 0000000..0856285 Binary files /dev/null and b/assets/pics/sc_logo_1.png differ diff --git a/content/about.org b/content/about.org index aad558c..542b1c7 100644 --- a/content/about.org +++ b/content/about.org @@ -1,7 +1,3 @@ -#+title: About -#+created: [2024-03-02 Sat] -#+setupfile: main.setup - #+begin_center : +--------------------------------------+ : | ___ _ _ | @@ -13,12 +9,6 @@ : +--------------------------------------+ #+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]] | -|------+-------+-------+-----+------+-----+-------| +My name is Dibyashanu Pati, I like Physics, Mathematics, Astronomy and Computers. -We think that knowledge should be open to everyone and freely accessible. -This website will document our projects, interests and ideas. - diff --git a/content/blogs/blog-index.org b/content/blogs.org similarity index 72% rename from content/blogs/blog-index.org rename to content/blogs.org index 887e082..4e46d17 100644 --- a/content/blogs/blog-index.org +++ b/content/blogs.org @@ -1,8 +1,3 @@ -#+title: Blogs List -#+created: [2024-03-01 Fri] -#+OPTIONS: num:nil ^:{} title:nil toc:nil -#+setupfile: ../main.setup - #+begin_center : +-----------------------------------------------------+ : |oooooooooo. oooo | @@ -17,13 +12,10 @@ : +-----------------------------------------------------+ #+end_center -[[../index.org][Home]] * A list of All Blogs -#+name: blog-table-complete -|- -|Title|Last Modified|Created| -|- -|[[file:test_blog_3.org][Test Blog]]||[2024-02-05 Thu]| - +|-----------+------------------+------------------| +| Title | Last Modified | Created | +|-----------+------------------+------------------| +| [[/test_blog][Test Blog]] | [2024-08-17 Sat] | [2024-08-17 Sat] | diff --git a/content/blogs/blog-table-complete.txt b/content/blogs/blog-table-complete.txt deleted file mode 100644 index cf7c463..0000000 --- a/content/blogs/blog-table-complete.txt +++ /dev/null @@ -1,4 +0,0 @@ -|- -|Title|Last Modified|Created| -|- -|[[file:test_blog_3.org][Test Blog]]||[2024-02-05 Thu]| diff --git a/content/blogs/blog.setup b/content/blogs/blog.setup deleted file mode 100644 index 028e3fb..0000000 --- a/content/blogs/blog.setup +++ /dev/null @@ -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: -#+HTML_HEAD: - -* Margins -** p -#+HTML_HEAD: -** h2 -#+HTML_HEAD: - - -Alligning center blocks to the center -#+HTML_HEAD: - -Setting up tables to always be in the center -#+HTML_HEAD: - -Setting up the h2(main) heading -#+HTML_HEAD: - -Setting up the h3 heading -#+HTML_HEAD: -#+HTML_HEAD: diff --git a/content/contact.org b/content/contact.org index 8f63e96..1cfcbf4 100644 --- a/content/contact.org +++ b/content/contact.org @@ -11,12 +11,6 @@ #+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 #+begin_center : ┌─┐ ┌┬┐ ┌─┐ ┬ ┬ @@ -84,68 +78,3 @@ Uwr5q7YlZSsd+DyyEU6tpNO98Afjk+0= -----END PGP PUBLIC KEY BLOCK----- #+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 diff --git a/content/credits.org b/content/credits.org new file mode 100644 index 0000000..6ba852f --- /dev/null +++ b/content/credits.org @@ -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. diff --git a/content/index.org b/content/index.org index 45bd886..dd08fec 100644 --- a/content/index.org +++ b/content/index.org @@ -1,21 +1,10 @@ -#+TITLE: Home +#+TITLE: Welcome to cosmicflow #+created: [2024-03-01 Fri] #+setupfile: main.setup -#+begin_center -: +------------------------------------------------------------------------------------------------------------------------+ -: | ██████╗ ██████╗ ███████╗ ███╗ ███╗ ██╗ ██████╗ ██████╗ ██╗ ██████╗ █████╗ ████████╗ ███████╗ ███████╗ | -: | ██╔════╝ ██╔═══██╗ ██╔════╝ ████╗ ████║ ██║ ██╔════╝ ██╔══██╗ ██║ ██╔══██╗ ██╔══██╗ ╚══██╔══╝ ██╔════╝ ██╔════╝ | -: | ██║ ██║ ██║ ███████╗ ██╔████╔██║ ██║ ██║ █████╗ ██████╔╝ ██║ ██████╔╝ ███████║ ██║ █████╗ ███████╗ | -: | ██║ ██║ ██║ ╚════██║ ██║╚██╔╝██║ ██║ ██║ ╚════╝ ██╔═══╝ ██║ ██╔══██╗ ██╔══██║ ██║ ██╔══╝ ╚════██║ | -: | ╚██████╗ ╚██████╔╝ ███████║ ██║ ╚═╝ ██║ ██║ ╚██████╗ ██║ ██║ ██║ ██║ ██║ ██║ ██║ ███████╗ ███████║ | -: | ╚═════╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚══════╝ | -: +------------------------------------------------------------------------------------------------------------------------+ -#+end_center +Cosmicflow is a site devoted to the interests of Dibyashanu Pati. + +I'm currently a student, I love Physics, Mathematics, Astronomy and Computers. -#+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]] | -|------+-------+-------+-----+------+-----+-------| diff --git a/content/links.org b/content/links.org index 941bbbd..3d39cb0 100644 --- a/content/links.org +++ b/content/links.org @@ -1,9 +1,3 @@ -#+title: Links -#+created: [2024-03-06 Wed] -#+last_modified: [2024-03-06 Wed] -#+setupfile: main.setup - - #+HTML_HEAD: -#+HTML_HEAD: - -** Seting up tags -*** p -#+HTML_HEAD: -*** h2 -#+HTML_HEAD: - -*** Setting up the h3 heading -#+HTML_HEAD: - -*** table of contents -#+HTML_HEAD: - -** Alligning center blocks to the center -#+HTML_HEAD: - -** Setting up tables to always be in the center -#+HTML_HEAD: - diff --git a/content/news.org b/content/news.org index a431985..119d1f2 100644 --- a/content/news.org +++ b/content/news.org @@ -1,8 +1,3 @@ -#+title: News -#+created: [2024-03-01 Fri] -#+last_modified: [2024-03-06 Wed] -#+setupfile: main.setup - #+begin_center : +--------------------------------------+ : | _ _ | @@ -13,12 +8,4 @@ : +--------------------------------------+ #+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]] | -|------+-------+-------+-----+------+-----+-------| - -* TOR and I2P - [2024-03-06 Wed] -Went live on I2P -#+name: i2p-b32-address.txt -Not found \ No newline at end of file +* Created this site from scratch - [2024-08-17 Sat] diff --git a/content/privacy_policy.org b/content/privacy_policy.org new file mode 100644 index 0000000..e8f8274 --- /dev/null +++ b/content/privacy_policy.org @@ -0,0 +1,3 @@ +#+title: Privacy Policy + +I *do not* intentionally collect any data of visitors. diff --git a/content/source_code.org b/content/source_code.org new file mode 100644 index 0000000..b9b6edc --- /dev/null +++ b/content/source_code.org @@ -0,0 +1 @@ +Coming Soon diff --git a/content/static/i2p-b32-address.txt b/content/static/i2p-b32-address.txt deleted file mode 100644 index a6a40cf..0000000 --- a/content/static/i2p-b32-address.txt +++ /dev/null @@ -1 +0,0 @@ -http://dbtjoqs5jnsyq6m6r35a47jix2v4zeloz5fpxi6htwihpnv3fcxq.b32.i2p diff --git a/content/static/tor-onionv3-address.txt b/content/static/tor-onionv3-address.txt deleted file mode 100644 index db8ea87..0000000 --- a/content/static/tor-onionv3-address.txt +++ /dev/null @@ -1 +0,0 @@ -http://acfc2abqv65bdiwimrx74vrlxy6eel66cjlmgqqvdekcrx7ufl3c2cad.onion diff --git a/content/blogs/test_blog_3.org b/content/test_blog.org similarity index 60% rename from content/blogs/test_blog_3.org rename to content/test_blog.org index 6f773cf..bda2e9f 100644 --- a/content/blogs/test_blog_3.org +++ b/content/test_blog.org @@ -1,7 +1,6 @@ #+title: Test Blog -#+created: [2024-02-05 Thu] -#+last_modified: -#+setupfile: blog.setup +#+created: [2024-08-17 Sat] +#+last_modified: [2024-08-17 Sat] #+author: Dibyashanu Pati * Introduction diff --git a/create-site.el b/create-site.el old mode 100644 new mode 100755 index e517a4c..3cecf0e --- a/create-site.el +++ b/create-site.el @@ -3,6 +3,7 @@ (require 'package) (setq package-user-dir (expand-file-name "./.packages")) (setq package-archives '(("melpa" . "https://melpa.org/packages/") + ("melpa-stable" . "https://stable.melpa.org/packages/") ("elpa" . "https://elpa.gnu.org/packages/"))) ;; Initialize the package system @@ -10,6 +11,19 @@ (unless package-archive-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 (package-install 'htmlize) (package-install 'ox-gemini) @@ -20,60 +34,380 @@ (require 'ox-publish) (use-package ox-gemini) +;; Install other dependencies +(use-package esxml + :pin "melpa-stable" + :ensure t) -(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 - ) +(use-package htmlize + :ensure t) + +(use-package webfeeder + :ensure t) -(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" - :base-directory "./content/static" - :base-extension "css\\|ttf\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|mp4\\|xml\\|html" - :publishing-directory "./public/cosmicpirates.space-html/static" - :recursive t - :publishing-function org-publish-attachment - ) +(defvar yt-iframe-format + (concat "
" + " " + "
")) - ("cosmicpirates-gmi" - :base-directory "./content" - :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 - ) +(defun my/embed-video (video-id) + (format yt-iframe-format video-id)) - ("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 - ) - ) + + +(setq user-full-name "Dibyashanu Pati") +(setq user-mail-address "dibyashanu@protonmail.com") + +(defvar my/site-url (if (string-equal (getenv "CI") "true") + "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 + "\n" + "" + (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 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 "%s" + (org-element-property :raw-link link) + (org-element-property :raw-link link))) + ((string-prefix-p "/" (org-element-property :raw-link link)) + (format "%s" + (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 "%s%s" + level + (or attributes "") + anchor-name + anchor-name + text + level + (or contents "")) + (concat + (when (org-export-first-sibling-p headline info) ""))) + (when (and container (not (string= "" container))) + (format "" (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 "
%s
" (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 "
\n%s\n
" + 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 How to Help 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 (org-publish-all t) diff --git a/create.sh b/create.sh index 89604a1..302923b 100755 --- a/create.sh +++ b/create.sh @@ -1,13 +1,4 @@ #!/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 -emacs -Q --script create-site.el +emacs -Q --batch -l create-site.el diff --git a/main.org b/main.org deleted file mode 100644 index 2339ba8..0000000 --- a/main.org +++ /dev/null @@ -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]] diff --git a/scripts/blog-table-generator.py b/scripts/blog-table-generator.py deleted file mode 100644 index 032d0be..0000000 --- a/scripts/blog-table-generator.py +++ /dev/null @@ -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 diff --git a/scripts/generate_and_update_address_files.py b/scripts/generate_and_update_address_files.py deleted file mode 100644 index bea6312..0000000 --- a/scripts/generate_and_update_address_files.py +++ /dev/null @@ -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 diff --git a/scripts/heading-link-generator.py b/scripts/heading-link-generator.py deleted file mode 100644 index de38cd2..0000000 --- a/scripts/heading-link-generator.py +++ /dev/null @@ -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