Initial commit
21
.gitignore
vendored
Executable file
@@ -0,0 +1,21 @@
|
||||
# build output
|
||||
dist/
|
||||
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
4
.vscode/extensions.json
vendored
Executable file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
11
.vscode/launch.json
vendored
Executable file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
7
astro.config.mjs
Executable file
@@ -0,0 +1,7 @@
|
||||
import { defineConfig } from 'astro/config';
|
||||
import mdx from "@astrojs/mdx";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
integrations: [mdx()],
|
||||
});
|
58
flake.lock
generated
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1755186698,
|
||||
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
|
||||
"path": "/nix/store/75d0qr8zvhv921ili0y2fqxa5drk9xpi-source",
|
||||
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
|
||||
"type": "path"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
20
flake.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
description = "nothing.run website";
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
outputs = {
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-utils,
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem
|
||||
(
|
||||
system: let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in {
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = with pkgs;[nodejs];
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
6245
package-lock.json
generated
Executable file
16
package.json
Executable file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "site",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "^0.19.7",
|
||||
"astro": "^2.0.18"
|
||||
}
|
||||
}
|
1
public/caddy.png
Normal file
@@ -0,0 +1 @@
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8"><img id="previewImage" src="https://cinny.in/assets/preview-light.png" alt="Cinny preview image">
|
BIN
public/fonts/Fira_Code_v6.2.zip
Normal file
563
public/fonts/README.txt
Normal file
@@ -0,0 +1,563 @@
|
||||
Installing
|
||||
==========
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
In the ttf folder, double-click each font file, click “Install font”; to install all at once, select all files, right-click, and choose “Install”
|
||||
|
||||
OR
|
||||
|
||||
Use https://chocolatey.org:
|
||||
|
||||
choco install firacode
|
||||
|
||||
|
||||
macOS
|
||||
-----
|
||||
|
||||
In the downloaded TTF folder:
|
||||
|
||||
1. Select all font files
|
||||
2. Right click and select `Open` (alternatively `Open With Font Book`)
|
||||
3. Select "Install Font"
|
||||
|
||||
OR
|
||||
|
||||
Use http://brew.sh:
|
||||
|
||||
`brew tap homebrew/cask-fonts`
|
||||
`brew install font-fira-code`
|
||||
|
||||
|
||||
Ubuntu Zesty (17.04), Debian Stretch (9) or newer
|
||||
-------------------------------------------------
|
||||
|
||||
1. Make sure that the `universe` (for Ubuntu) or `contrib` (for Debian) repository is enabled (see https://askubuntu.com/questions/148638/how-do-i-enable-the-universe-repository or https://wiki.debian.org/SourcesList#Component)
|
||||
2. Install `fonts-firacode` package either by executing `sudo apt install fonts-firacode` in the terminal or via GUI tool (like “Software Center”)
|
||||
|
||||
|
||||
Arch Linux
|
||||
----------
|
||||
|
||||
Fira Code package is available in the official repository: https://www.archlinux.org/packages/community/any/ttf-fira-code/.
|
||||
|
||||
Variant of Fira Code package is available in the AUR: https://aur.archlinux.org/packages/otf-fira-code-git/.
|
||||
|
||||
|
||||
Gentoo
|
||||
------
|
||||
|
||||
emerge -av media-fonts/fira-code
|
||||
|
||||
|
||||
Fedora
|
||||
------
|
||||
|
||||
To install, perform the following commands:
|
||||
|
||||
dnf install fira-code-fonts
|
||||
|
||||
|
||||
Solus
|
||||
-----
|
||||
|
||||
Fira Code package is available in the official repository: `font-firacode-ttf` and `font-firacode-otf`.
|
||||
They can be installed by running:
|
||||
|
||||
sudo eopkg install font-firacode-ttf font-firacode-otf
|
||||
|
||||
|
||||
Void linux
|
||||
----------
|
||||
|
||||
xbps-install font-firacode
|
||||
|
||||
|
||||
Linux Manual Installation
|
||||
-------------------------
|
||||
|
||||
With most desktop-oriented distributions, double-clicking each font file in the ttf folder and selecting “Install font” should be enough. If it isn’t, create and run `download_and_install.sh` script:
|
||||
|
||||
#!/usr/bin/env bash
|
||||
|
||||
fonts_dir="${HOME}/.local/share/fonts"
|
||||
if [ ! -d "${fonts_dir}" ]; then
|
||||
echo "mkdir -p $fonts_dir"
|
||||
mkdir -p "${fonts_dir}"
|
||||
else
|
||||
echo "Found fonts dir $fonts_dir"
|
||||
fi
|
||||
|
||||
for type in Bold Light Medium Regular Retina; do
|
||||
file_path="${HOME}/.local/share/fonts/FiraCode-${type}.ttf"
|
||||
file_url="https://github.com/tonsky/FiraCode/blob/master/distr/ttf/FiraCode-${type}.ttf?raw=true"
|
||||
if [ ! -e "${file_path}" ]; then
|
||||
echo "wget -O $file_path $file_url"
|
||||
wget -O "${file_path}" "${file_url}"
|
||||
else
|
||||
echo "Found existing file $file_path"
|
||||
fi;
|
||||
done
|
||||
|
||||
echo "fc-cache -f"
|
||||
fc-cache -f
|
||||
|
||||
More details: https://github.com/tonsky/FiraCode/issues/4
|
||||
|
||||
|
||||
FreeBSD
|
||||
-------
|
||||
|
||||
Using pkg(8):
|
||||
|
||||
pkg install firacode
|
||||
|
||||
OR
|
||||
|
||||
Using ports:
|
||||
|
||||
cd /usr/ports/x11-fonts/firacode && make install clean
|
||||
|
||||
|
||||
Enabling ligatures
|
||||
==================
|
||||
|
||||
Atom
|
||||
----
|
||||
|
||||
To change your font to Fira Code, open Atom's preferences (`cmd + ,` on a Mac, `ctrl + ,` on PC), make sure the "Settings" tab is selected, or the "Editor" in Atom 1.10+, and scroll down to "Editor Settings". In the "Font Family" field, enter `Fira Code`.
|
||||
|
||||
If you wish to specify a font weight, for example, Light, use `Fira Code Light` as a font name (Windows) or `FiraCode-Light` (macOS).
|
||||
|
||||
Ligatures are enabled by default in Atom 1.9 and above.
|
||||
|
||||
|
||||
VS Code
|
||||
-------
|
||||
|
||||
To open the settings editor, first from the File menu choose Preferences, Settings or use keyboard shortcut `Ctrl + ,` (Windows) or `Cmd + ,` (macOS).
|
||||
|
||||
To enable FiraCode in the settings editor, under "Commonly Used", expand the "Text Editor" settings and then click on "Font". In the "Font Family" input box type `Fira Code`, replacing any content. Tick the check box "Enables/Disables font ligatures" under "Font Ligatures" to enable the special ligatures.
|
||||
|
||||
If you wish to specify a font weight, for example, Light, use `Fira Code Light` as a font name (Windows) or `FiraCode-Light` (macOS).
|
||||
|
||||
|
||||
IntelliJ products
|
||||
-----------------
|
||||
|
||||
1. Enable in Settings → Editor → Font → Enable Font Ligatures
|
||||
2. Select `Fira Code` as "Primary font" under Settings → Editor → Font
|
||||
|
||||
Additionally, if a Color Scheme is selected:
|
||||
|
||||
3. Enable in Settings → Editor → Color Scheme → Color Scheme Font → Enable Font Ligatures
|
||||
4. Select Fira Code as "Primary font" under Settings → Editor → Color Scheme → Color Scheme Font
|
||||
|
||||
|
||||
BBEdit, TextWrangler
|
||||
--------------------
|
||||
|
||||
Run in your terminal:
|
||||
|
||||
defaults write com.barebones.bbedit "EnableFontLigatures_Fira Code" -bool YES
|
||||
|
||||
Source: https://www.barebones.com/support/bbedit/ExpertPreferences.html
|
||||
|
||||
|
||||
Brackets
|
||||
--------
|
||||
|
||||
1. From the `View` menu choose `Themes....`
|
||||
2. Paste `'Fira Code'`, at the beginning of `Font Family`
|
||||
|
||||
|
||||
Emacs
|
||||
-----
|
||||
|
||||
There are a few options when it comes down to using ligatures in
|
||||
Emacs. They are listed in order of preferred to less-preferred. Pick one!
|
||||
|
||||
1. Using composition mode in Emacs Mac port
|
||||
|
||||
If you're using the latest Mac port of Emacs (https://bitbucket.org/mituharu/emacs-mac by Mitsuharu Yamamoto) for macOS, you can use:
|
||||
|
||||
(mac-auto-operator-composition-mode)
|
||||
|
||||
This is generally the easiest solution, but can only be used on macOS.
|
||||
|
||||
2. Using prettify-symbols
|
||||
|
||||
These instructions are pieced together by https://github.com/Triavanicus, taking some pieces from https://github.com/minad/hasklig-mode.
|
||||
|
||||
This method requires you to install the Fira Code Symbol font, made by https://github.com/siegebell:
|
||||
https://github.com/tonsky/FiraCode/issues/211#issuecomment-239058632
|
||||
|
||||
(defun fira-code-mode--make-alist (list)
|
||||
"Generate prettify-symbols alist from LIST."
|
||||
(let ((idx -1))
|
||||
(mapcar
|
||||
(lambda (s)
|
||||
(setq idx (1+ idx))
|
||||
(let* ((code (+ #Xe100 idx))
|
||||
(width (string-width s))
|
||||
(prefix ())
|
||||
(suffix '(?\s (Br . Br)))
|
||||
(n 1))
|
||||
(while (< n width)
|
||||
(setq prefix (append prefix '(?\s (Br . Bl))))
|
||||
(setq n (1+ n)))
|
||||
(cons s (append prefix suffix (list (decode-char 'ucs code))))))
|
||||
list)))
|
||||
|
||||
(defconst fira-code-mode--ligatures
|
||||
'("www" "**" "***" "**/" "*>" "*/" "\\\\" "\\\\\\"
|
||||
"{-" "[]" "::" ":::" ":=" "!!" "!=" "!==" "-}"
|
||||
"--" "---" "-->" "->" "->>" "-<" "-<<" "-~"
|
||||
"#{" "#[" "##" "###" "####" "#(" "#?" "#_" "#_("
|
||||
".-" ".=" ".." "..<" "..." "?=" "??" ";;" "/*"
|
||||
"/**" "/=" "/==" "/>" "//" "///" "&&" "||" "||="
|
||||
"|=" "|>" "^=" "$>" "++" "+++" "+>" "=:=" "=="
|
||||
"===" "==>" "=>" "=>>" "<=" "=<<" "=/=" ">-" ">="
|
||||
">=>" ">>" ">>-" ">>=" ">>>" "<*" "<*>" "<|" "<|>"
|
||||
"<$" "<$>" "<!--" "<-" "<--" "<->" "<+" "<+>" "<="
|
||||
"<==" "<=>" "<=<" "<>" "<<" "<<-" "<<=" "<<<" "<~"
|
||||
"<~~" "</" "</>" "~@" "~-" "~=" "~>" "~~" "~~>" "%%"
|
||||
"x" ":" "+" "+" "*"))
|
||||
|
||||
(defvar fira-code-mode--old-prettify-alist)
|
||||
|
||||
(defun fira-code-mode--enable ()
|
||||
"Enable Fira Code ligatures in current buffer."
|
||||
(setq-local fira-code-mode--old-prettify-alist prettify-symbols-alist)
|
||||
(setq-local prettify-symbols-alist (append (fira-code-mode--make-alist fira-code-mode--ligatures) fira-code-mode--old-prettify-alist))
|
||||
(prettify-symbols-mode t))
|
||||
|
||||
(defun fira-code-mode--disable ()
|
||||
"Disable Fira Code ligatures in current buffer."
|
||||
(setq-local prettify-symbols-alist fira-code-mode--old-prettify-alist)
|
||||
(prettify-symbols-mode -1))
|
||||
|
||||
(define-minor-mode fira-code-mode
|
||||
"Fira Code ligatures minor mode"
|
||||
:lighter " Fira Code"
|
||||
(setq-local prettify-symbols-unprettify-at-point 'right-edge)
|
||||
(if fira-code-mode
|
||||
(fira-code-mode--enable)
|
||||
(fira-code-mode--disable)))
|
||||
|
||||
(defun fira-code-mode--setup ()
|
||||
"Setup Fira Code Symbols"
|
||||
(set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol"))
|
||||
|
||||
(provide 'fira-code-mode)
|
||||
|
||||
Alternative instructions: https://github.com/Profpatsch/blog/blob/master/posts/ligature-emulation-in-emacs/post.md#appendix-b-update-1-firacode-integration
|
||||
|
||||
3. Using composition char table
|
||||
|
||||
Thanks to https://github.com/seanfarley for putting this together; extended by https://github.com/jrblevin.
|
||||
|
||||
Put this lisp in your .emacs:
|
||||
|
||||
(when (window-system)
|
||||
(set-frame-font "Fira Code"))
|
||||
(let ((alist '((33 . ".\\(?:\\(?:==\\|!!\\)\\|[!=]\\)")
|
||||
(35 . ".\\(?:###\\|##\\|_(\\|[#(?[_{]\\)")
|
||||
(36 . ".\\(?:>\\)")
|
||||
(37 . ".\\(?:\\(?:%%\\)\\|%\\)")
|
||||
(38 . ".\\(?:\\(?:&&\\)\\|&\\)")
|
||||
(42 . ".\\(?:\\(?:\\*\\*/\\)\\|\\(?:\\*[*/]\\)\\|[*/>]\\)")
|
||||
(43 . ".\\(?:\\(?:\\+\\+\\)\\|[+>]\\)")
|
||||
(45 . ".\\(?:\\(?:-[>-]\\|<<\\|>>\\)\\|[<>}~-]\\)")
|
||||
(46 . ".\\(?:\\(?:\\.[.<]\\)\\|[.=-]\\)")
|
||||
(47 . ".\\(?:\\(?:\\*\\*\\|//\\|==\\)\\|[*/=>]\\)")
|
||||
(48 . ".\\(?:x[a-zA-Z]\\)")
|
||||
(58 . ".\\(?:::\\|[:=]\\)")
|
||||
(59 . ".\\(?:;;\\|;\\)")
|
||||
(60 . ".\\(?:\\(?:!--\\)\\|\\(?:~~\\|->\\|\\$>\\|\\*>\\|\\+>\\|--\\|<[<=-]\\|=[<=>]\\||>\\)\\|[*$+~/<=>|-]\\)")
|
||||
(61 . ".\\(?:\\(?:/=\\|:=\\|<<\\|=[=>]\\|>>\\)\\|[<=>~]\\)")
|
||||
(62 . ".\\(?:\\(?:=>\\|>[=>-]\\)\\|[=>-]\\)")
|
||||
(63 . ".\\(?:\\(\\?\\?\\)\\|[:=?]\\)")
|
||||
(91 . ".\\(?:]\\)")
|
||||
(92 . ".\\(?:\\(?:\\\\\\\\\\)\\|\\\\\\)")
|
||||
(94 . ".\\(?:=\\)")
|
||||
(119 . ".\\(?:ww\\)")
|
||||
(123 . ".\\(?:-\\)")
|
||||
(124 . ".\\(?:\\(?:|[=|]\\)\\|[=>|]\\)")
|
||||
(126 . ".\\(?:~>\\|~~\\|[>=@~-]\\)")
|
||||
)
|
||||
))
|
||||
(dolist (char-regexp alist)
|
||||
(set-char-table-range composition-function-table (car char-regexp)
|
||||
`([,(cdr char-regexp) 0 font-shape-gstring]))))
|
||||
|
||||
**Note!** If you get `error in process filter: Attempt to shape unibyte text`, check out https://github.com/tonsky/FiraCode/issues/42. Emacs Cider users may avoid this issue by commenting the following line from the above config:
|
||||
|
||||
;; (46 . ".\\(?:\\(?:\\.[.<]\\)\\|[.=-]\\)")
|
||||
|
||||
Char `45` is also known to have issues in macOS Mojave.
|
||||
|
||||
If you are having problems with helm you can disable ligatures in helm:
|
||||
|
||||
(add-hook 'helm-major-mode-hook
|
||||
(lambda ()
|
||||
(setq auto-composition-mode nil)))
|
||||
|
||||
4. Using font-lock keywords
|
||||
|
||||
If none of the above worked, you can try this method.
|
||||
|
||||
This method requires you to install the Fira Code Symbol font, made by https://github.com/siegebell:
|
||||
https://github.com/tonsky/FiraCode/issues/211#issuecomment-239058632
|
||||
|
||||
;;; Fira code
|
||||
;; This works when using emacs --daemon + emacsclient
|
||||
(add-hook 'after-make-frame-functions (lambda (frame) (set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol")))
|
||||
;; This works when using emacs without server/client
|
||||
(set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol")
|
||||
;; I haven't found one statement that makes both of the above situations work, so I use both for now
|
||||
|
||||
(defconst fira-code-font-lock-keywords-alist
|
||||
(mapcar (lambda (regex-char-pair)
|
||||
`(,(car regex-char-pair)
|
||||
(0 (prog1 ()
|
||||
(compose-region (match-beginning 1)
|
||||
(match-end 1)
|
||||
;; The first argument to concat is a string containing a literal tab
|
||||
,(concat " " (list (decode-char 'ucs (cadr regex-char-pair)))))))))
|
||||
'(("\\(www\\)" #Xe100)
|
||||
("[^/]\\(\\*\\*\\)[^/]" #Xe101)
|
||||
("\\(\\*\\*\\*\\)" #Xe102)
|
||||
("\\(\\*\\*/\\)" #Xe103)
|
||||
("\\(\\*>\\)" #Xe104)
|
||||
("[^*]\\(\\*/\\)" #Xe105)
|
||||
("\\(\\\\\\\\\\)" #Xe106)
|
||||
("\\(\\\\\\\\\\\\\\)" #Xe107)
|
||||
("\\({-\\)" #Xe108)
|
||||
("\\(\\[\\]\\)" #Xe109)
|
||||
("\\(::\\)" #Xe10a)
|
||||
("\\(:::\\)" #Xe10b)
|
||||
("[^=]\\(:=\\)" #Xe10c)
|
||||
("\\(!!\\)" #Xe10d)
|
||||
("\\(!=\\)" #Xe10e)
|
||||
("\\(!==\\)" #Xe10f)
|
||||
("\\(-}\\)" #Xe110)
|
||||
("\\(--\\)" #Xe111)
|
||||
("\\(---\\)" #Xe112)
|
||||
("\\(-->\\)" #Xe113)
|
||||
("[^-]\\(->\\)" #Xe114)
|
||||
("\\(->>\\)" #Xe115)
|
||||
("\\(-<\\)" #Xe116)
|
||||
("\\(-<<\\)" #Xe117)
|
||||
("\\(-~\\)" #Xe118)
|
||||
("\\(#{\\)" #Xe119)
|
||||
("\\(#\\[\\)" #Xe11a)
|
||||
("\\(##\\)" #Xe11b)
|
||||
("\\(###\\)" #Xe11c)
|
||||
("\\(####\\)" #Xe11d)
|
||||
("\\(#(\\)" #Xe11e)
|
||||
("\\(#\\?\\)" #Xe11f)
|
||||
("\\(#_\\)" #Xe120)
|
||||
("\\(#_(\\)" #Xe121)
|
||||
("\\(\\.-\\)" #Xe122)
|
||||
("\\(\\.=\\)" #Xe123)
|
||||
("\\(\\.\\.\\)" #Xe124)
|
||||
("\\(\\.\\.<\\)" #Xe125)
|
||||
("\\(\\.\\.\\.\\)" #Xe126)
|
||||
("\\(\\?=\\)" #Xe127)
|
||||
("\\(\\?\\?\\)" #Xe128)
|
||||
("\\(;;\\)" #Xe129)
|
||||
("\\(/\\*\\)" #Xe12a)
|
||||
("\\(/\\*\\*\\)" #Xe12b)
|
||||
("\\(/=\\)" #Xe12c)
|
||||
("\\(/==\\)" #Xe12d)
|
||||
("\\(/>\\)" #Xe12e)
|
||||
("\\(//\\)" #Xe12f)
|
||||
("\\(///\\)" #Xe130)
|
||||
("\\(&&\\)" #Xe131)
|
||||
("\\(||\\)" #Xe132)
|
||||
("\\(||=\\)" #Xe133)
|
||||
("[^|]\\(|=\\)" #Xe134)
|
||||
("\\(|>\\)" #Xe135)
|
||||
("\\(\\^=\\)" #Xe136)
|
||||
("\\(\\$>\\)" #Xe137)
|
||||
("\\(\\+\\+\\)" #Xe138)
|
||||
("\\(\\+\\+\\+\\)" #Xe139)
|
||||
("\\(\\+>\\)" #Xe13a)
|
||||
("\\(=:=\\)" #Xe13b)
|
||||
("[^!/]\\(==\\)[^>]" #Xe13c)
|
||||
("\\(===\\)" #Xe13d)
|
||||
("\\(==>\\)" #Xe13e)
|
||||
("[^=]\\(=>\\)" #Xe13f)
|
||||
("\\(=>>\\)" #Xe140)
|
||||
("\\(<=\\)" #Xe141)
|
||||
("\\(=<<\\)" #Xe142)
|
||||
("\\(=/=\\)" #Xe143)
|
||||
("\\(>-\\)" #Xe144)
|
||||
("\\(>=\\)" #Xe145)
|
||||
("\\(>=>\\)" #Xe146)
|
||||
("[^-=]\\(>>\\)" #Xe147)
|
||||
("\\(>>-\\)" #Xe148)
|
||||
("\\(>>=\\)" #Xe149)
|
||||
("\\(>>>\\)" #Xe14a)
|
||||
("\\(<\\*\\)" #Xe14b)
|
||||
("\\(<\\*>\\)" #Xe14c)
|
||||
("\\(<|\\)" #Xe14d)
|
||||
("\\(<|>\\)" #Xe14e)
|
||||
("\\(<\\$\\)" #Xe14f)
|
||||
("\\(<\\$>\\)" #Xe150)
|
||||
("\\(<!--\\)" #Xe151)
|
||||
("\\(<-\\)" #Xe152)
|
||||
("\\(<--\\)" #Xe153)
|
||||
("\\(<->\\)" #Xe154)
|
||||
("\\(<\\+\\)" #Xe155)
|
||||
("\\(<\\+>\\)" #Xe156)
|
||||
("\\(<=\\)" #Xe157)
|
||||
("\\(<==\\)" #Xe158)
|
||||
("\\(<=>\\)" #Xe159)
|
||||
("\\(<=<\\)" #Xe15a)
|
||||
("\\(<>\\)" #Xe15b)
|
||||
("[^-=]\\(<<\\)" #Xe15c)
|
||||
("\\(<<-\\)" #Xe15d)
|
||||
("\\(<<=\\)" #Xe15e)
|
||||
("\\(<<<\\)" #Xe15f)
|
||||
("\\(<~\\)" #Xe160)
|
||||
("\\(<~~\\)" #Xe161)
|
||||
("\\(</\\)" #Xe162)
|
||||
("\\(</>\\)" #Xe163)
|
||||
("\\(~@\\)" #Xe164)
|
||||
("\\(~-\\)" #Xe165)
|
||||
("\\(~=\\)" #Xe166)
|
||||
("\\(~>\\)" #Xe167)
|
||||
("[^<]\\(~~\\)" #Xe168)
|
||||
("\\(~~>\\)" #Xe169)
|
||||
("\\(%%\\)" #Xe16a)
|
||||
("[0\[]\\(x\\)" #Xe16b)
|
||||
("[^:=]\\(:\\)[^:=]" #Xe16c)
|
||||
("[^\\+<>]\\(\\+\\)[^\\+<>]" #Xe16d)
|
||||
("[^\\*/<>]\\(\\*\\)[^\\*/<>]" #Xe16f))))
|
||||
|
||||
(defun add-fira-code-symbol-keywords ()
|
||||
(font-lock-add-keywords nil fira-code-font-lock-keywords-alist))
|
||||
|
||||
(add-hook 'prog-mode-hook
|
||||
#'add-fira-code-symbol-keywords)
|
||||
|
||||
On some systems, `==` will appear incorrectly as a blank space in certain modes unless you add the following lines to your init file:
|
||||
|
||||
(set-language-environment "UTF-8")
|
||||
(set-default-coding-systems 'utf-8)
|
||||
|
||||
|
||||
GoormIDE
|
||||
--------
|
||||
|
||||
In a workspace:
|
||||
|
||||
1. Click goormIDE, then Preferences.
|
||||
2. Go to Theme, then focus Custom Theme CSS.
|
||||
3. Copy & paste the following:
|
||||
|
||||
@font-face{
|
||||
font-family: 'Fira Code';
|
||||
src: url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/eot/FiraCode-Regular.eot') format('embedded-opentype'),
|
||||
url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/woff2/FiraCode-Regular.woff2') format('woff2'),
|
||||
url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/woff/FiraCode-Regular.woff') format('woff'),
|
||||
url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/ttf/FiraCode-Regular.ttf') format('truetype');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.editor_container pre {
|
||||
-webkit-font-feature-settings: "liga" on, "calt" on;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-family: 'Fira Code';
|
||||
}
|
||||
|
||||
4. Click Aplly or OK
|
||||
5. Happy coding!
|
||||
|
||||
|
||||
Cloud9
|
||||
------
|
||||
|
||||
In a workspace:
|
||||
|
||||
1. Click Cloud9, then Preferences (or use keyboard shortcut CTRL + ,)
|
||||
2. Go to Themes, then click on You can also style Cloud9 by editing your stylesheet (this will open a blank styles.css file in the C9 editor)
|
||||
3. Copy & paste the following:
|
||||
|
||||
@font-face{
|
||||
font-family: 'Fira Code';
|
||||
src: url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/eot/FiraCode-Regular.eot') format('embedded-opentype'),
|
||||
url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/woff2/FiraCode-Regular.woff2') format('woff2'),
|
||||
url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/woff/FiraCode-Regular.woff') format('woff'),
|
||||
url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/ttf/FiraCode-Regular.ttf') format('truetype');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.ace_editor{
|
||||
-webkit-font-feature-settings: "liga" on, "calt" on;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-family: 'Fira Code';
|
||||
}
|
||||
|
||||
4. Back in Preferences tab, click on User Settings, then click on Code Editor (Ace)
|
||||
5. In Font Family field, enter Fira Code
|
||||
6. Optionally, repeat step 5 for Preferences > User Settings > Terminal, if you want Fira Code font in C9 terminal.
|
||||
|
||||
|
||||
MacVim
|
||||
------
|
||||
|
||||
Add this to ~/.gvimrc:
|
||||
|
||||
set macligatures
|
||||
set guifont=Fira\ Code:h12
|
||||
|
||||
MacVim supports ligatures starting from version 7.4.
|
||||
|
||||
|
||||
RStudio
|
||||
-------
|
||||
|
||||
In RStudio:
|
||||
|
||||
1. Go to Tools > Global Options > Appearance
|
||||
2. Select "Fira Code" as Editor Font. In older versions of RStudio, check "Use Ligatures".
|
||||
3. Hit "OK" and enjoy
|
||||
|
||||
|
||||
Sublime Text
|
||||
------------
|
||||
|
||||
Preferences --> Settings
|
||||
|
||||
Add before "ignored_packages":
|
||||
|
||||
"font_face": "Fira Code",
|
||||
"font_options": ["subpixel_antialias"],
|
||||
|
||||
If you want enable antialias, add in font_options: "gray_antialias"
|
||||
|
||||
|
||||
Visual Studio
|
||||
-------------
|
||||
|
||||
1. Launch Visual Studio (2015 or later).
|
||||
2. Launch the Options dialog by opening the "Tools" menu and selecting "Options".
|
||||
3. In the Options dialog, under the "Environment" category, you'll find "Fonts and Colors". Click on that. You'll see a combo-box on the right hand side of the dialog labelled "Font". Select "Fira Code" from that combo-box.
|
||||
4. Click "OK" to dismiss.
|
||||
5. Restart Visual Studio.
|
||||
|
||||
Now, most FiraCode ligatures will work. A notable exception is the hyphen-based ligatures (e.g. the C++ dereference '->'). See https://github.com/tonsky/FiraCode/issues/422 for details.
|
||||
|
||||
|
||||
Troubleshooting
|
||||
===============
|
||||
|
||||
See https://github.com/tonsky/FiraCode/wiki/Troubleshooting
|
48
public/fonts/fira_code.css
Normal file
@@ -0,0 +1,48 @@
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-Light.woff2') format('woff2'),
|
||||
url("woff/FiraCode-Light.woff") format("woff");
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-Regular.woff2') format('woff2'),
|
||||
url("woff/FiraCode-Regular.woff") format("woff");
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-Medium.woff2') format('woff2'),
|
||||
url("woff/FiraCode-Medium.woff") format("woff");
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-SemiBold.woff2') format('woff2'),
|
||||
url("woff/FiraCode-SemiBold.woff") format("woff");
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url('woff2/FiraCode-Bold.woff2') format('woff2'),
|
||||
url("woff/FiraCode-Bold.woff") format("woff");
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code VF';
|
||||
src: url('woff2/FiraCode-VF.woff2') format('woff2-variations'),
|
||||
url('woff/FiraCode-VF.woff') format('woff-variations');
|
||||
/* font-weight requires a range: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide#Using_a_variable_font_font-face_changes */
|
||||
font-weight: 300 700;
|
||||
font-style: normal;
|
||||
}
|
95
public/fonts/specimen.html
Normal file
@@ -0,0 +1,95 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<title>Fira Code Specimen</title>
|
||||
|
||||
<link rel="stylesheet" href="fira_code.css">
|
||||
<style>
|
||||
body { font: 14px/1.5em "Fira Code"; }
|
||||
.code {
|
||||
font-feature-settings: "calt" 1; /* Enable ligatures for IE 10+, Edge */
|
||||
text-rendering: optimizeLegibility; /* Force ligatures for Webkit, Blink, Gecko */
|
||||
width: 30em;
|
||||
margin: 5em auto;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
.light { font-weight: 300; }
|
||||
.regular { font-weight: 400; }
|
||||
.medium { font-weight: 500; }
|
||||
.semibold { font-weight: 600; }
|
||||
.bold { font-weight: 700; }
|
||||
.variable { font-family: 'Fira Code VF'; font-variation-settings: 'wght' 400; }
|
||||
i { font-style: normal; color: #c33; }
|
||||
b { font-weight: inherit; color: #c33; }
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
function onWeightChange(weight) {
|
||||
// code_variable.style['font-weight'] = weight;
|
||||
code_variable.style['font-variation-settings'] = "'wght' " + weight;
|
||||
span_wght.innerText = weight;
|
||||
}
|
||||
</script>
|
||||
<body>
|
||||
|
||||
<div class="code light"><b># Fira Code Light</b>
|
||||
|
||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||
| n <i><=</i> 0 <i>=></i> []
|
||||
| empty list <i>=></i> []
|
||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||
|
||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||
|
||||
|
||||
<div class="code regular"><b># Fira Code Regular</b>
|
||||
|
||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||
| n <i><=</i> 0 <i>=></i> []
|
||||
| empty list <i>=></i> []
|
||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||
|
||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||
|
||||
|
||||
<div class="code medium"><b># Fira Code Medium</b>
|
||||
|
||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||
| n <i><=</i> 0 <i>=></i> []
|
||||
| empty list <i>=></i> []
|
||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||
|
||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||
|
||||
|
||||
<div class="code semibold"><b># Fira Code SemiBold</b>
|
||||
|
||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||
| n <i><=</i> 0 <i>=></i> []
|
||||
| empty list <i>=></i> []
|
||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||
|
||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||
|
||||
|
||||
<div class="code bold"><b># Fira Code Bold</b>
|
||||
|
||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||
| n <i><=</i> 0 <i>=></i> []
|
||||
| empty list <i>=></i> []
|
||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||
|
||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
||||
|
||||
<div id="code_variable" class="code variable"><b># Fira Code Variable</b>
|
||||
|
||||
<input type="range" min="300" max="700" value="400" step="10" style="width: 300px;" oninput="onWeightChange(this.value)" onchange="onWeightChange(this.value)"> <span id="span_wght">400</span>
|
||||
|
||||
take = (n, [x, <i>...</i>xs]:list) <i>--></i>
|
||||
| n <i><=</i> 0 <i>=></i> []
|
||||
| empty list <i>=></i> []
|
||||
| otherwise <i>=></i> [x] <i>++</i> take n-1, xs
|
||||
|
||||
last3 = reverse <i>>></i> take 3 <i>>></i> reverse</div>
|
BIN
public/fonts/ttf/FiraCode-Bold.ttf
Normal file
BIN
public/fonts/ttf/FiraCode-Light.ttf
Normal file
BIN
public/fonts/ttf/FiraCode-Medium.ttf
Normal file
BIN
public/fonts/ttf/FiraCode-Regular.ttf
Normal file
BIN
public/fonts/ttf/FiraCode-Retina.ttf
Normal file
BIN
public/fonts/ttf/FiraCode-SemiBold.ttf
Normal file
BIN
public/fonts/variable_ttf/FiraCode-VF.ttf
Normal file
BIN
public/fonts/woff/FiraCode-Bold.woff
Normal file
BIN
public/fonts/woff/FiraCode-Light.woff
Normal file
BIN
public/fonts/woff/FiraCode-Medium.woff
Normal file
BIN
public/fonts/woff/FiraCode-Regular.woff
Normal file
BIN
public/fonts/woff/FiraCode-SemiBold.woff
Normal file
BIN
public/fonts/woff/FiraCode-VF.woff
Normal file
BIN
public/fonts/woff2/FiraCode-Bold.woff2
Normal file
BIN
public/fonts/woff2/FiraCode-Light.woff2
Normal file
BIN
public/fonts/woff2/FiraCode-Medium.woff2
Normal file
BIN
public/fonts/woff2/FiraCode-Regular.woff2
Normal file
BIN
public/fonts/woff2/FiraCode-SemiBold.woff2
Normal file
BIN
public/fonts/woff2/FiraCode-VF.woff2
Normal file
BIN
public/gitea.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
public/hedgedoc.png
Normal file
After Width: | Height: | Size: 157 KiB |
BIN
public/kanidm.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
public/kanidm_ico.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
public/matrix.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
public/matrix_alt.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
public/nothingrun-favicon-blackonwhite.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
public/nothingrun-favicon-whiteonblack.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
public/xmr_address_qr.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
63
src/components/Card.astro
Executable file
@@ -0,0 +1,63 @@
|
||||
---
|
||||
export interface Props {
|
||||
title: string;
|
||||
body: string;
|
||||
href: string;
|
||||
}
|
||||
|
||||
const { href, title, body } = Astro.props;
|
||||
---
|
||||
|
||||
<li class="link-card">
|
||||
<a href={href}>
|
||||
<h2>
|
||||
{title}
|
||||
<span>→</span>
|
||||
</h2>
|
||||
<p>
|
||||
{body}
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
<style>
|
||||
.link-card {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
padding: 0.25rem;
|
||||
background-color: white;
|
||||
background-image: none;
|
||||
background-size: 400%;
|
||||
border-radius: 0.6rem;
|
||||
background-position: 100%;
|
||||
transition: background-position 0.6s cubic-bezier(0.22, 1, 0.36, 1);
|
||||
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.link-card > a {
|
||||
width: 100%;
|
||||
text-decoration: none;
|
||||
line-height: 1.4;
|
||||
padding: 1rem 1.3rem;
|
||||
border-radius: 0.35rem;
|
||||
color: #111;
|
||||
background-color: white;
|
||||
opacity: 0.8;
|
||||
}
|
||||
h2 {
|
||||
margin: 0;
|
||||
font-size: 1.25rem;
|
||||
transition: color 0.6s cubic-bezier(0.22, 1, 0.36, 1);
|
||||
}
|
||||
p {
|
||||
margin-top: 0.5rem;
|
||||
margin-bottom: 0;
|
||||
color: #444;
|
||||
}
|
||||
.link-card:is(:hover, :focus-within) {
|
||||
background-position: 0;
|
||||
background-image: var(--accent-gradient);
|
||||
}
|
||||
.link-card:is(:hover, :focus-within) h2 {
|
||||
color: rgb(var(--accent));
|
||||
}
|
||||
</style>
|
23
src/components/footer.astro
Executable file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
---
|
||||
<div id="footer">
|
||||
<main>
|
||||
<pre>
|
||||
.--.
|
||||
." o \__
|
||||
_.-" ,( `
|
||||
_.-" ,;;|
|
||||
_.-=" _," ,,;;;'
|
||||
.-"`_.-"``-..,,;;;;:'
|
||||
`"'` `\`\
|
||||
/^\\\
|
||||
</pre>
|
||||
</main>
|
||||
<aside>
|
||||
<b>Made with ♥</b> by Thary<br>
|
||||
<!-- Website sources are available on <a href="https://git.vector1.dev/thary/website">Gitea</a>!<br> -->
|
||||
<!-- All content is in Public domain and licensed under <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a><br> -->
|
||||
Logo is created by <a href="https://houl.floof.company/">Houl</a><br>
|
||||
ASCII arts are taken from <a href="https://web.archive.org/web/20010420182629/http://www.geocities.com/spunk1111/indexjava.htm">this website</a>
|
||||
</aside>
|
||||
</div>
|
67
src/components/header.astro
Executable file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
export interface Props {
|
||||
location: string;
|
||||
}
|
||||
|
||||
const { location } = Astro.props;
|
||||
---
|
||||
|
||||
<div class="header">
|
||||
<a href="/">~/</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="https://uptime.nothing.run">Uptime</a>
|
||||
<a href="/news">News</a>
|
||||
<a href="/notes.html">Notes</a>
|
||||
<a href="/donate">Donate :3</a>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.header a {
|
||||
margin: 3px;
|
||||
}
|
||||
|
||||
.main {
|
||||
text-decoration: underline bold;
|
||||
}
|
||||
|
||||
.link-card {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
padding: 0.25rem;
|
||||
background-color: white;
|
||||
background-image: none;
|
||||
background-size: 400%;
|
||||
border-radius: 0.6rem;
|
||||
background-position: 100%;
|
||||
transition: background-position 0.6s cubic-bezier(0.22, 1, 0.36, 1);
|
||||
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.link-card > a {
|
||||
width: 100%;
|
||||
text-decoration: none;
|
||||
line-height: 1.4;
|
||||
padding: 1rem 1.3rem;
|
||||
border-radius: 0.35rem;
|
||||
color: #111;
|
||||
background-color: white;
|
||||
opacity: 0.8;
|
||||
}
|
||||
h2 {
|
||||
margin: 0;
|
||||
font-size: 1.25rem;
|
||||
transition: color 0.6s cubic-bezier(0.22, 1, 0.36, 1);
|
||||
}
|
||||
p {
|
||||
margin-top: 0.5rem;
|
||||
margin-bottom: 0;
|
||||
color: #444;
|
||||
}
|
||||
.link-card:is(:hover, :focus-within) {
|
||||
background-position: 0;
|
||||
background-image: var(--accent-gradient);
|
||||
}
|
||||
.link-card:is(:hover, :focus-within) h2 {
|
||||
color: rgb(var(--accent));
|
||||
}
|
||||
</style>
|
3
src/components/kanidm.astro
Normal file
@@ -0,0 +1,3 @@
|
||||
---
|
||||
---
|
||||
<img src="/kanidm_ico.png" alt="This service uses auth via KaniDM" style="position: absolute; right: 10px; bottom: 75px; width:35px;height:auth;" class="kanidm-logo" />
|
3
src/components/matrix-webclients.md
Normal file
@@ -0,0 +1,3 @@
|
||||
- **[SchildiChat Web](https://element.nothing.run)** - built with Flutter and based on Element Matrix client with many features!
|
||||
- **[Cinny](https://cinny.nothing.run)** - most beautiful Matrix client
|
||||
- *Coming soon!* **[FluffyChat](https://fluffy.nothing.run)** - another Web Matrix client
|
9
src/components/service.astro
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
const { id, name, href } = Astro.props;
|
||||
---
|
||||
<a href={href} class="servicelink"><div class="bubble" id={id}>
|
||||
<div class="bubble-blur">
|
||||
<h3>{name}</h3>
|
||||
<slot /></div>
|
||||
</div>
|
||||
</a>
|
4
src/components/services.md
Normal file
@@ -0,0 +1,4 @@
|
||||
- **[Main website](/)**
|
||||
- **[Matrix](/matrix.html)** - decentralized communication server (powered by <a href="https://matrix.org/docs/projects/server/synapse">Synapse</a>). We have [Web-clients for Matrix](/matrix.html#web)
|
||||
<!-- - *Coming soon!* **[Mastodon](https://social.nothing.run)** - free social network, part of the Fediverse, powered by ActivityPub -->
|
||||
- *Coming soon!* **Forgejo** - lightwale Git repos hosting with Git over HTTPS and over SSH support. Based on Gitea
|
1
src/env.d.ts
vendored
Executable file
@@ -0,0 +1 @@
|
||||
/// <reference types="astro/client" />
|
45
src/fonts.css
Normal file
@@ -0,0 +1,45 @@
|
||||
/* FiraCode */
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url("/fonts/ttf/FiraCode-Light.ttf") format("ttf"),
|
||||
url('/fonts/woff2/FiraCode-Light.woff2') format('woff2'),
|
||||
url("/fonts/woff/FiraCode-Light.woff") format("woff"),;
|
||||
font-weight: 300;
|
||||
font-style: light;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url("/fonts/ttf/FiraCode-Regular.ttf") format("ttf"),
|
||||
url('/fonts/woff2/FiraCode-Regular.woff2') format('woff2'),
|
||||
url("/fonts/woff/FiraCode-Regular.woff") format("woff"),;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url("/fonts/ttf/FiraCode-Medium.ttf") format("ttf"),
|
||||
url('/fonts/woff2/FiraCode-Medium.woff2') format('woff2'),
|
||||
url("/fonts/woff/FiraCode-Medium.woff") format("woff"),;
|
||||
font-weight: 400;
|
||||
font-style: medium;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url("/fonts/ttf/FiraCode-SemiBold.ttf") format("ttf"),
|
||||
url('/fonts/woff2/FiraCode-SemiBold.woff2') format('woff2'),
|
||||
url("/fonts/woff/FiraCode-SemiBold.woff") format("woff");
|
||||
font-weight: 550;
|
||||
font-style: semibold;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Code';
|
||||
src: url("/fonts/ttf/FiraCode-Bold.ttf") format("ttf"),
|
||||
url('/fonts/woff2/FiraCode-Bold.woff2') format('woff2'),
|
||||
url("/fonts/woff/FiraCode-Bold.woff") format("woff"),;
|
||||
font-weight: 700;
|
||||
font-style: bold;
|
||||
}
|
35
src/layouts/Layout.astro
Executable file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
export interface Props {
|
||||
title: string;
|
||||
}
|
||||
|
||||
const { title } = Astro.props;
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<title>{title}</title>
|
||||
</head>
|
||||
<body>
|
||||
<slot />
|
||||
</body>
|
||||
</html>
|
||||
<style is:global>
|
||||
:root {
|
||||
--accent: 124, 58, 237;
|
||||
--accent-gradient: linear-gradient(45deg, rgb(var(--accent)), #da62c4 30%, white 60%);
|
||||
}
|
||||
html {
|
||||
font-family: system-ui, sans-serif;
|
||||
background-color: #F6F6F6;
|
||||
}
|
||||
code {
|
||||
font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono,
|
||||
Bitstream Vera Sans Mono, Courier New, monospace;
|
||||
}
|
||||
</style>
|
37
src/layouts/index.astro
Executable file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
import Header from "../components/header.astro";
|
||||
import Footer from "../components/footer.astro";
|
||||
import "../fonts.css";
|
||||
import "../style.css";
|
||||
|
||||
const {frontmatter, title} = Astro.props;
|
||||
let props = {};
|
||||
if (typeof frontmatter !== 'undefined') {
|
||||
props.title = frontmatter.title;
|
||||
} else { props.title = title; };
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<meta name="description" content="{frontmatter.description}" />
|
||||
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
|
||||
|
||||
<title>{props.title}</title>
|
||||
</head>
|
||||
<body>
|
||||
<Header />
|
||||
|
||||
<h1>{props.title}</h1>
|
||||
|
||||
<slot />
|
||||
<Footer />
|
||||
|
||||
</body>
|
||||
</html>
|
25
src/pages/articles/belarusian.mdx
Executable file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
layout: '../../layouts/index.astro'
|
||||
title: 'Беларусский или белорусский'
|
||||
description: 'Беларусский или белорусский - как писать?'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
le: '19 Aug. 2025'
|
||||
---
|
||||
|
||||
## Введение
|
||||
|
||||
Вопрос "Беларусь или Белоруссия" здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.
|
||||
|
||||
Но отдельная тема - писать белорусский или беларусский. Этот вопрос спорный, но я постараюсь ответить на него с точки зрения русского языка.
|
||||
|
||||
## Морфологический принцип
|
||||
|
||||
В отличие от беларусского языка, русская орфография имеет в своей основе морфологический принцип, то есть по идее вне зависимости от своей позиции морфема всегда пишется одинаково. Например, са**д** - са**д**ы (на конце всегда `д`).<br/>Исключения в виде `без-` - `без-` не учитываются, так как они редки.
|
||||
|
||||
## Как писать?
|
||||
|
||||
Для начала, в литературном стандарте закреплена форма с буквой `о`. Но в таком случае слово Беларусь должно было бы писаться с `о`, так как соеденительной морфемой в русском `а` быть не может.
|
||||
|
||||
Вот только слово Беларусь пишется с `а`. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать `беларусский`.<br/>Ну либо переходить на `Белорусь`, но...
|
||||
|
||||
P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.
|
43
src/pages/contact.astro
Executable file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
import Layout from '../layouts/index.astro'
|
||||
---
|
||||
<Layout title="Contact">
|
||||
<div class="asciicontainer">
|
||||
<pre class="smaller">
|
||||
__
|
||||
[_ |
|
||||
_____||_____
|
||||
.'` || .:;\
|
||||
/ || // `|
|
||||
| \/ || |
|
||||
| || |
|
||||
| ||_.'\
|
||||
'-----...----`\ \
|
||||
| | \ |
|
||||
| | '.__/
|
||||
| |
|
||||
</pre>
|
||||
|
||||
<div>
|
||||
<h2>Contact me (Thary)</h2>
|
||||
<ul>
|
||||
<li><a href="mailto:thary@riseup.net">thary@riseup.net</a></li>
|
||||
<li><a href="https://matrix.to/#/@thary:nothing.run">@thary:nothing.run</a></li>
|
||||
<li><a href="xmpp:thary@disroot.org">thary@disroot.org</a></li>
|
||||
<li>[Fediverse] <a href="https://fe.disroot.org/@thary">@thary@fe.disroot.org</a></li>
|
||||
<li>[Telegram] ask me</li>
|
||||
<li>[Signal] ask me</li>
|
||||
</ul>
|
||||
I'll try to answer as soon as posible, but I rarely check my email, so notifications is the only hope :)
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2>Our chat</h2>
|
||||
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
|
||||
<ul>
|
||||
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
|
||||
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
17
src/pages/donate.mdx
Executable file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
layout: '../layouts/index.astro'
|
||||
title: 'Donate :3'
|
||||
description: 'Donate us :3'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
---
|
||||
|
||||
import Service from '../components/service.astro';
|
||||
|
||||
If you say so... \<3
|
||||
|
||||
You can send me some *Moneros (XMR)* to this address:
|
||||
<pre>88yfzFYCVdbZEETEpPekAg2PdfrhFrGBkGQrUXhW6W1jP275LisMKR36gmVU3yM1vw7AMkKxWEwKwDYv1vs9macA4WBPKKN</pre>
|
||||
|
||||
<img src="/xmr_address_qr.png" alt="XMR address as QR: 88yfzFYCVdbZEETEpPekAg2PdfrhFrGBkGQrUXhW6W1jP275LisMKR36gmVU3yM1vw7AMkKxWEwKwDYv1vs9macA4WBPKKN" />
|
||||
|
||||
Thank you very much!
|
64
src/pages/index.mdx
Executable file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
layout: '../layouts/index.astro'
|
||||
title: 'nothing.run'
|
||||
description: 'Librehoster, crypto- and infoanarchysts, free software fans'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
---
|
||||
|
||||
import KaniDM from '../components/kanidm.astro';
|
||||
import Service from '../components/service.astro';
|
||||
|
||||
## About
|
||||
nothing.run is a small corner of the Network providing some self-hosted services. nothing.run is made by only one person who believes in the exchange of information freedom and personal privacy. It's our main aim, so we are trying to promote encryption, not to save logs, not to track your activity, etc.
|
||||
|
||||
However, there is no reason why you can trust us. And it is the most significant plus of the decentralization - you have choise! You are free to choose services and servers, providers. This freedom ensures transparency and gives you the opportunity to protect your privacy without relying on any single entity
|
||||
|
||||
So... If you want to get an account, just [contact me](./contact)<br />
|
||||
|
||||
<div class="bigcontainer">
|
||||
<div>
|
||||
## Services
|
||||
<div class="container" id="services">
|
||||
|
||||
<Service id="matrix" name="Matrix" href="./matrix">
|
||||
<p>Decentralized solution for end<br />to end encrypted instant messaging.</p>
|
||||
</Service>
|
||||
|
||||
<Service id="gitea" name="Gitea" href="https://tea.nothing.run">
|
||||
<p>Nice way to create, manage<br/>and store your Git repos</p>
|
||||
<KaniDM />
|
||||
</Service>
|
||||
|
||||
<Service id="hedgedoc" name="HedgeDoc" href="https://pad.nothing.run">
|
||||
<p>*Temporary disabled*<br />Pretty simple web-based<br />collaborative markdown editor</p>
|
||||
<KaniDM />
|
||||
</Service>
|
||||
|
||||
<Service id="kanidm" name="KaniDM" href="https://idm.nothing.run">
|
||||
<p><img src="/kanidm_ico.png" alt="KaniDM logo" style="width:35px;height:25px;" /><br />Simple identity management platform</p>
|
||||
</Service>
|
||||
|
||||
<Service id="searxng" name="SearXNG" href="https://searxng.org">
|
||||
<p>*Coming soon!*<br />Privacy-respecting metasearch engine</p>
|
||||
</Service>
|
||||
|
||||
<Service id="vikunja" name="Vikunja" href="https://vikunja.io">
|
||||
<p>*Coming soon!*<br />Organize your tasks and collaborate with others</p>
|
||||
</Service>
|
||||
|
||||
</div>
|
||||
|
||||
<img src="/kanidm_ico.png" alt="KaniDM logo" style="bottom: 75px; width:35px;height:auth;" class="kanidm-logo" /> means that the given service uses OAuth to auth, so you need KaniDM account to use it
|
||||
</div>
|
||||
|
||||
<div>
|
||||
## Hosts
|
||||
There are 4 hosts owned by the admin,<br/>but only 2 of them are used by nothing.run
|
||||
- Cepheus - main vps ([Contabo](https://contabo.com))<br />
|
||||
P.s. We are going to migrate Cepheus from Contabo to Netcup
|
||||
- Archenar - additional vps
|
||||
- Naos - homeserver (it's Pentium computer xD)<br />
|
||||
We are setting up this server. Vikunja will be here
|
||||
- OrangePi (but right now it isn't used for anything :)
|
||||
</div>
|
||||
</div>
|
31
src/pages/matrix.mdx
Executable file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
layout: '../layouts/index.astro'
|
||||
title: 'Matrix'
|
||||
description: 'Matrix'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
---
|
||||
[**Matrix**](https://matrix.org) is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available!
|
||||
|
||||
## Our room
|
||||
|
||||
## Clients
|
||||
|
||||
### Web-clients
|
||||
- [Cinny](https://cinny.nothing.run) - modern and beautiful Matrix web client
|
||||
- [Element](https://element.nothing.run) - the most popular and functional Matrix client
|
||||
|
||||
### Mobile clients
|
||||
- [Element](https://github.com/element-hq/element-android) - very buggy and uncomfortable client
|
||||
- [FluffyChat](https://fluffychat.im/) -
|
||||
- [SchildiChat](https://schildi.chat/android/)
|
||||
- [Element X](https://element.io/download) - Next generation Element on mobile with native sliding sync. It's much more comfortable than classic Element
|
||||
- [SchildiChat Next](https://schildi.chat/android/next/) - Element X with spaces support
|
||||
|
||||
### Desktop clients
|
||||
- [iamb](https://iamb.chat/) - written in Rust terminal-based client with Vim keybindings
|
||||
- [gomuks](https://github.com/gomuks/gomuks) - a terminal Matrix client written in Go
|
||||
- [Ement.el](https://github.com/alphapapa/ement.el) - really? Are you so crazy to chat from Emacs???
|
||||
- [Fractal]
|
||||
- [NeoChat]
|
||||
- [Nheko]
|
||||
- You can use Element, Schildi and Cinny Web as desktop clients through Electron. It's unperformance way to use Matrix, but... You can! :)
|
10
src/pages/news.mdx
Executable file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
layout: '../layouts/index.astro'
|
||||
title: 'nothing.run'
|
||||
description: 'Librehoster, crypto- and infoanarchysts, free software fans'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
---
|
||||
|
||||
### 9 August 2025
|
||||
|
||||
- There are [Gitea](https://tea.nothing.run) and [KaniDM](https://idm.nothing.run) right now
|
9
src/pages/notes.mdx
Executable file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
layout: '../layouts/index.astro'
|
||||
title: 'nothing.run'
|
||||
description: 'Tharys notes and articles'
|
||||
keys: 'nothing crypto free software libre self host'
|
||||
---
|
||||
|
||||
## Linguistics
|
||||
- [Беларусский или белорусский](/articles/belarusian.html)
|
228
src/style.css
Normal file
@@ -0,0 +1,228 @@
|
||||
:root {
|
||||
--bg: #2d353b;
|
||||
--fg: #c3c6aa;
|
||||
--yellow: #dbbc7f;
|
||||
--yellow2: #4d4c43;
|
||||
--orange: #e69875;
|
||||
--green: #a7c080;
|
||||
--red: #e67e80;
|
||||
--blue: #7fbbb3;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
p { margin-top: 1px; }
|
||||
|
||||
h1 {
|
||||
color: var(--yellow);
|
||||
text-align: center;
|
||||
}
|
||||
h2 { color: var(--orange) }
|
||||
h3 { color: var(--yellow) }
|
||||
h4 { color: var(--blue) }
|
||||
|
||||
h1::before { content: "# "; }
|
||||
|
||||
body {
|
||||
color: var(--fg);
|
||||
background-color: var(--bg);
|
||||
margin: 0px;
|
||||
padding: 20px;
|
||||
/* font-family: "Fira Sans", sans-serif; */
|
||||
line-height: 1.5em;
|
||||
font-size: 1.1em;
|
||||
/* font-family: "Fira Code", monospace; */
|
||||
/* font-style: medium; */
|
||||
font-family: "Fira Code", monospace;
|
||||
font-optical-sizing: auto;
|
||||
font-style: normal;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
ul, li {
|
||||
list-style:none;
|
||||
list-style: symbols(cyclic "*");
|
||||
}
|
||||
li {
|
||||
padding-left: 5px;
|
||||
}
|
||||
/* li:before { */
|
||||
/* content: "*" */
|
||||
/* } */
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--green);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
background: var(--green);
|
||||
color: var(--bg);
|
||||
}
|
||||
|
||||
a[href^="gemini://"]:hover {
|
||||
background: var(--blue);
|
||||
}
|
||||
a[href^="gemini://"]:hover::before {
|
||||
content: "🌐 ";
|
||||
color: var(--bg);
|
||||
}
|
||||
|
||||
a[href^="gemini://"]::before {
|
||||
content: "🌐 ";
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
a[href^="mailto:"]::before {
|
||||
/* content: "📧 "; */
|
||||
content: "[@] ";
|
||||
color: var(--blue);
|
||||
}
|
||||
a[href^="https://matrix.to"]::before {
|
||||
content: "[Matrix] ";
|
||||
color: var(--blue);
|
||||
}
|
||||
a[href^="xmpp:"]::before {
|
||||
content: "[XMPP] ";
|
||||
color: var(--blue);
|
||||
}
|
||||
a[href^="mailto:"]:hover::before, a[href^="https://matrix.to"]:hover::before, a[href^="xmpp:"]:hover::before {
|
||||
color: var(--bg);
|
||||
}
|
||||
|
||||
a::selection {
|
||||
background-color: var(--yellow2);
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: var(--yellow);
|
||||
color: var(--bg);
|
||||
}
|
||||
|
||||
.center { text-align: center; }
|
||||
.bold { text-decoration: bold; }
|
||||
|
||||
/* Footer */
|
||||
#footer > * {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
#footer > aside {
|
||||
/* margin-top: auto; */
|
||||
/* margin-bottom: auto; */
|
||||
background-color: #1e2326;
|
||||
box-shadow: 0px 0px 40px 10px #1e2326;
|
||||
border-radius: 10px;
|
||||
max-width: 80%;
|
||||
}
|
||||
@media (orientation: landscape) {
|
||||
#footer {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
#footer > aside {
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (orientation: portrait) {
|
||||
#footer > * {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: monospace;
|
||||
white-space: pre;
|
||||
}
|
||||
pre.smaller {
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
.bubble {
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
border-radius: 25px;
|
||||
height: 150px;
|
||||
width: 400px;
|
||||
overflow: hidden;
|
||||
margin: 10px;
|
||||
border-style: solid;
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
#services a:hover div.bubble {
|
||||
border-color: var(--green);
|
||||
}
|
||||
|
||||
#services a:hover {
|
||||
background: var(--bg);
|
||||
}
|
||||
|
||||
.bubble .bubble-blur {
|
||||
width: 100%;
|
||||
height: 120%;
|
||||
-webkit-backdrop-filter: blur(3px);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
|
||||
.bubble-blur h3, .bubble p {
|
||||
color: var(--fg);
|
||||
text-align: center;
|
||||
}
|
||||
.bubble-blur h3 {
|
||||
font-size: 170%;
|
||||
}
|
||||
|
||||
#matrix {
|
||||
background-image: url("./assets/matrix.png");
|
||||
}
|
||||
#gitea {
|
||||
background-image: url("./assets/gitea.png");
|
||||
}
|
||||
#hedgedoc {
|
||||
background-image: url("./assets/hedgedoc.png");
|
||||
}
|
||||
#kanidm {
|
||||
background-image: url("./assets/kanidm.png");
|
||||
}
|
||||
|
||||
.container {
|
||||
display: grid;
|
||||
/* margin: 0 auto; */
|
||||
padding: 10px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
grid-column-gap: 10px;
|
||||
/* grid-template-columns: auto auto auto; */
|
||||
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
||||
max-width: 1300px;
|
||||
}
|
||||
.asciicontainer {
|
||||
display: grid;
|
||||
/* margin: 0 auto; */
|
||||
padding: 10px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
grid-column-gap: 20px;
|
||||
grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr));
|
||||
max-width: 1300px;
|
||||
}
|
||||
@media (min-width: 1570px) {
|
||||
.bigcontainer {
|
||||
display: flex;
|
||||
gap: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.bigcontainer {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
3
tsconfig.json
Executable file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/base"
|
||||
}
|