Compare commits
No commits in common. "main" and "public" have entirely different histories.
3
.dockerignore
Normal file
|
@ -0,0 +1,3 @@
|
|||
.DS_Store
|
||||
node_modules
|
||||
dist
|
|
@ -1,8 +0,0 @@
|
|||
on: [push]
|
||||
jobs:
|
||||
ls:
|
||||
runs-on: docker
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- run: |
|
||||
ls ${{ github.workspace }}
|
38
.gitignore
vendored
|
@ -1,22 +1,24 @@
|
|||
# Created by https://www.toptal.com/developers/gitignore/api/hugo
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=hugo
|
||||
# build output
|
||||
dist/
|
||||
|
||||
### Hugo ###
|
||||
# Generated files by hugo
|
||||
/public/
|
||||
/resources/_gen/
|
||||
/assets/jsconfig.json
|
||||
hugo_stats.json
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# Executable may be added to repository
|
||||
hugo.exe
|
||||
hugo.darwin
|
||||
hugo.linux
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# Temporary lock file while building
|
||||
/.hugo_build.lock
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/hugo
|
||||
content/.obsidian
|
||||
content/.trash
|
||||
static/the-monospace-web/*.jpg
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
src/pages/posts/.obsidian/
|
||||
.vscode
|
||||
src/pages/posts/.trash
|
||||
|
|
18
.gitmodules
vendored
|
@ -1,6 +1,12 @@
|
|||
[submodule "themes/ananke"]
|
||||
path = themes/ananke
|
||||
url = https://github.com/theNewDynamic/gohugo-theme-ananke.git
|
||||
[submodule "themes/the-monospace-web"]
|
||||
path = static/the-monospace-web
|
||||
url = https://github.com/owickstrom/the-monospace-web.git
|
||||
[submodule "src/styles/terminal-css"]
|
||||
path = src/styles/terminal-css
|
||||
url = git@github.com:ArgentumCation/terminal-css.git
|
||||
[submodule "littlelink"]
|
||||
path = littlelink
|
||||
url = git@github.com:ArgentumCation/littlelink.git
|
||||
[submodule "submodules/littlelink"]
|
||||
path = submodules/littlelink
|
||||
url = ssh://git@ssh.argentumcation.com:2552/mira/littlelink.git
|
||||
[submodule "submodules/littlelink-extended"]
|
||||
path = submodules/littlelink-extended
|
||||
url = https://github.com/sethcottle/littlelink-extended/
|
||||
|
|
5
.prettierrc.mjs
Normal file
|
@ -0,0 +1,5 @@
|
|||
// .prettierrc.mjs
|
||||
/** @type {import("prettier").Config} */
|
||||
export default {
|
||||
plugins: ['prettier-plugin-astro'],
|
||||
};
|
4
.vscode/extensions.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
11
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
19
Dockerfile
|
@ -1,12 +1,11 @@
|
|||
FROM alpine:latest
|
||||
|
||||
FROM node:lts-alpine AS base
|
||||
RUN npm i -g pnpm nodemon && \
|
||||
apk add git
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN pnpm install && pnpm build
|
||||
|
||||
# Install required packages
|
||||
RUN apk add --no-cache hugo git
|
||||
|
||||
# Clone the website repository
|
||||
RUN git clone https://git.argentumcation.com/mira/website.git /app \
|
||||
&& git submodule update --init --recursive
|
||||
|
||||
CMD ["hugo", "server", "--bind", "0.0.0.0"]
|
||||
ENV HOST=0.0.0.0
|
||||
ENV PORT=4321
|
||||
EXPOSE 4321
|
||||
CMD nodemon --delay 10s ./dist/server/entry.mjs
|
||||
|
|
55
README.md
Normal file
|
@ -0,0 +1,55 @@
|
|||
# Astro Starter Kit: Basics
|
||||
|
||||
```
|
||||
npm create astro@latest -- --template basics
|
||||
```
|
||||
|
||||
[](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics)
|
||||
[](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics)
|
||||
[](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json)
|
||||
|
||||
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
||||
|
||||

|
||||
|
||||
|
||||
## 🚀 Project Structure
|
||||
|
||||
Inside of your Astro project, you'll see the following folders and files:
|
||||
|
||||
```
|
||||
/
|
||||
├── public/
|
||||
│ └── favicon.svg
|
||||
├── src/
|
||||
│ ├── components/
|
||||
│ │ └── Card.astro
|
||||
│ ├── layouts/
|
||||
│ │ └── Layout.astro
|
||||
│ └── pages/
|
||||
│ └── index.astro
|
||||
└── package.json
|
||||
```
|
||||
|
||||
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
|
||||
|
||||
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
|
||||
|
||||
Any static assets, like images, can be placed in the `public/` directory.
|
||||
|
||||
## 🧞 Commands
|
||||
|
||||
All commands are run from the root of the project, from a terminal:
|
||||
|
||||
| Command | Action |
|
||||
| :--------------------- | :----------------------------------------------- |
|
||||
| `npm install` | Installs dependencies |
|
||||
| `npm run dev` | Starts local dev server at `localhost:3000` |
|
||||
| `npm run build` | Build your production site to `./dist/` |
|
||||
| `npm run preview` | Preview your build locally, before deploying |
|
||||
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||
| `npm run astro --help` | Get help using the Astro CLI |
|
||||
|
||||
## 👀 Want to learn more?
|
||||
|
||||
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
|
|
@ -1,5 +0,0 @@
|
|||
+++
|
||||
date = '{{ .Date }}'
|
||||
draft = true
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
+++
|
45
astro.config.mjs
Normal file
|
@ -0,0 +1,45 @@
|
|||
import { defineConfig } from "astro/config";
|
||||
import mdx from "@astrojs/mdx";
|
||||
import nodejs from "@astrojs/node";
|
||||
import { remarkReadingTime } from "./remark-reading-time.mjs";
|
||||
import { modifiedTime } from "./remark-modified-time.mjs";
|
||||
import remarkCallout from "@r4ai/remark-callout";
|
||||
|
||||
export default defineConfig({
|
||||
site: "https://argentumcation.com",
|
||||
markdown: {
|
||||
syntaxHighlight: false,
|
||||
shikiConfig: {
|
||||
theme: "css-variables",
|
||||
},
|
||||
remarkPlugins: [remarkReadingTime, modifiedTime, remarkCallout],
|
||||
},
|
||||
adapter: nodejs({
|
||||
mode: "standalone",
|
||||
}),
|
||||
output: "hybrid",
|
||||
vite: {
|
||||
build: {
|
||||
rollupOptions: {
|
||||
output: {
|
||||
manualChunks(id) {
|
||||
if (id.includes("node_modules")) {
|
||||
return id
|
||||
.toString()
|
||||
.split("node_modules/")[1]
|
||||
.split("/")[0]
|
||||
.toString();
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
integrations: [
|
||||
mdx({
|
||||
// Markdown config now ignored
|
||||
extendMarkdownConfig: true,
|
||||
// No `remarkPlugins` applied
|
||||
}),
|
||||
],
|
||||
});
|
|
@ -1,59 +0,0 @@
|
|||
---
|
||||
title: plan9 FS
|
||||
---
|
||||
|
||||
Digested from:
|
||||
|
||||
- https://www.usenix.org/legacy/events/usenix05/tech/freenix/full_papers/hensbergen/hensbergen.pdf
|
||||
- https://www.kernel.org/doc/Documentation/filesystems/9p.txt
|
||||
- http://ericvh.github.io/9p-rfc/rfc9p2000.html
|
||||
- http://ericvh.github.io/9p-rfc/rfc9p2000.u.html
|
||||
- https://9fans.github.io/plan9port/man/man4/9pfuse.html
|
||||
- https://github.com/pfpacket/rust-9p/tree/master/example/unpfs
|
||||
|
||||
# 9p2000 Opcodes
|
||||
|
||||
All messages take a `tag` parameter used to multiplex connections
|
||||
|
||||
## Session
|
||||
|
||||
- version
|
||||
- parameter negotiations
|
||||
- auth
|
||||
- T
|
||||
- afid: auth handle??
|
||||
- uname
|
||||
- username
|
||||
- aname: mount name (root if blank)
|
||||
- attach
|
||||
- establish connection to server
|
||||
- T
|
||||
- fid is file handle, chosen by client?
|
||||
- afid is an 'auth handle'
|
||||
- -1 for no auth
|
||||
- uname
|
||||
- aname
|
||||
- R:
|
||||
- flush
|
||||
- abort request
|
||||
- error
|
||||
|
||||
## File
|
||||
|
||||
- walk
|
||||
- lookup pathname
|
||||
- open
|
||||
- create
|
||||
- read
|
||||
- write
|
||||
- clunk
|
||||
- release a file?
|
||||
|
||||
## Metadata
|
||||
|
||||
- stat
|
||||
- read metadata attrs
|
||||
- wstat
|
||||
- write metadata attrs
|
||||
- Requests are T-messages
|
||||
- responses are R-messages
|
|
@ -1,10 +0,0 @@
|
|||
# Game Loop
|
||||
- display board
|
||||
- check if endgame state
|
||||
- end game if needed
|
||||
- get current side
|
||||
- get move for current side
|
||||
|
||||
---
|
||||
- `Game` struct contains game state
|
||||
- Refactor to trait?
|
|
@ -1,71 +0,0 @@
|
|||
---
|
||||
{}
|
||||
---
|
||||
# Hardware
|
||||
- Display Resolution: 192x160
|
||||
- potentially just upscaled from 96x80
|
||||
- at 3x scaling that's 576x480, 32px pillarboxes if 640x480
|
||||
- 384x320
|
||||
- how small can the screen physically be?
|
||||
- android guidelines say 48dp @ 160dpi or 0.3"
|
||||
- android guidelines also say 48dp is about 9mm so who the fuck knows anymore
|
||||
- apple says 44pt ~~or 44/72" or 0.61"~~
|
||||
- 44pt is 44px, 88px, 132px depending on device
|
||||
- 132px on iPhone X @ 448(?)dpi so ~ 0.294"
|
||||
- 192x160 is 1.2"x1"
|
||||
- 640x480 is 4"x5" for a 6.4" diagonal
|
||||
- 28.8" x 24" needed to meet android accessibility guidelines jfc
|
||||
- tl;dr: Apple and Google seem to want about 0.3"per target
|
||||
- NDS screen size is 106.666 dpi
|
||||
- poketch would be 1.8x1.5"
|
||||
- **640x480 would be 2x1.5" or 2.5" diagonal**
|
||||
- https://www.adafruit.com/product/2478 should do the trick
|
||||
- 320x240 2.4"
|
||||
- we use 288x240 (1.5x)
|
||||
|
||||
- 2 Bit grayscale
|
||||
- Touch screen
|
||||
- 5:4 aspect ratio
|
||||
- 1/2 physical buttons
|
||||
# etc
|
||||
- will need a font
|
||||
- sprite based?
|
||||
- ttf based?
|
||||
- https://lvgl.io/tools/fontconverter
|
||||
# stretch goals
|
||||
- use wifi/ble
|
||||
- config applet
|
||||
- also would handle right vs left handed
|
||||
- mqtt/ntfy.sh
|
||||
- display notifications using margins?
|
||||
- android notifications sync
|
||||
- requires adding to gadgetbridge long term
|
||||
- pedometer
|
||||
- needs extra hardware
|
||||
|
||||
# Sprites
|
||||
- [x] Digital Watch
|
||||
- [x] Calculator
|
||||
- [ ] Memo Pad
|
||||
- [x] Pedometer
|
||||
- [x] Pokemon List
|
||||
- [x] Friendship Checker
|
||||
- [ ] Dowsing Machine
|
||||
- [x] Berry Searcher
|
||||
- [ ] Day-Care Checker
|
||||
- [ ] Pokemon History
|
||||
- [ ] Counter
|
||||
- [x] Analog Watch
|
||||
- [x] Marking Map
|
||||
- [x] Link Searcher
|
||||
- [ ] Coin Toss
|
||||
- [ ] Move Tester
|
||||
- [ ] Calendar
|
||||
- [ ] Dot Artist
|
||||
- [x] Roulette
|
||||
- [ ] Chain Counter
|
||||
- [x] Kitchen Timer
|
||||
- [ ] Color Changer
|
||||
- [ ] Matchup Checker
|
||||
- [ ] Stopwatch
|
||||
- [ ] Alarm Clock
|
|
@ -1,23 +0,0 @@
|
|||
|
||||
| | |
|
||||
| --- | --- |
|
||||
| a | A |
|
||||
| e | E/* |
|
||||
| i | 1 |
|
||||
| o | 0 |
|
||||
| u | 5 |
|
||||
| n | 7 |
|
||||
| | |
|
||||
| j | 3 |
|
||||
| k | 9 |
|
||||
| l | 6 |
|
||||
| m | 4 |
|
||||
| p | B |
|
||||
| s | C |
|
||||
| t | D |
|
||||
| w | 2 |
|
||||
| ∅ | F/# |
|
||||
|
||||
D091 41 3A7 416A
|
||||
|
||||
Ports over to DTMF as well
|
|
@ -1,49 +0,0 @@
|
|||
---
|
||||
author: ArgentumCation
|
||||
date: "1970-01-01"
|
||||
slug: disorganized-notes
|
||||
title: Disorganized Notes
|
||||
---
|
||||
|
||||
# NixOS/Nix
|
||||
|
||||
- Show channels: `sudo nix-channel --list`
|
||||
- add unstable channel: `sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable unstable`
|
||||
- update repos: `sudo nix-channel --update; sudo nix search -u`
|
||||
|
||||
---
|
||||
|
||||
# SSH
|
||||
|
||||
- Set up port forwarding in existing connection:
|
||||
|
||||
```sh
|
||||
$ ~C
|
||||
ssh> -D [port number]
|
||||
[Enter]
|
||||
[Enter]
|
||||
$
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Shell
|
||||
|
||||
- `!!:s/foo/bar/`, replace first instance of `foo` with `bar` in the previous command
|
||||
- `^foo^bar` same thing but shorter and less flexible
|
||||
- `!foo` rerun last command containing `foo`
|
||||
|
||||
---
|
||||
|
||||
# Keepalived
|
||||
|
||||
- don't ever use use_vmac, it's fucky
|
||||
|
||||
---
|
||||
|
||||
# Toki Pona Prop 65 Warning
|
||||
|
||||
- ⚠️ toki pi (ike ken)! ni li ken pana e ijo Esutolosen tawa sina. ma Kaliponja li sona e ni: ijo Esutolosen li ken pakala e jan. o sona mute: http://www.P65Warnings.ca.gov.
|
||||
- ⚠️"O' L n K! \\|/ > K "n'>> O Esutolosen A_b. (+) Kaliponja > "[]' > \\|/: O Esutolosen > K \[Z\] >> ,O,. \`o "[]' |||: http://www.P65Warnings.ca.gov.
|
||||
- ⚠️! . : .: http://www.P65Warnings.ca.gov.
|
||||
- ⚠️ tk P iG g! N l g bn e **iJ ezt~\[** Tw sn. M **Kl=Y** l Sn e N: iJ **ezt~\[** l g bKL e j. o Sn uE: http://www.P65Warnings.ca.gov.
|
|
@ -1,65 +0,0 @@
|
|||
---
|
||||
date: "1970-01-01"
|
||||
draft: true
|
||||
title: Miraidon (Airplay Server)
|
||||
---
|
||||
|
||||
## Reference Impls
|
||||
|
||||
- https://github.com/mikebrady/shairport-sync/tree/master?tab=readme-ov-file
|
||||
- https://github.com/ckdo/airplay2-receiver
|
||||
- registers mdns service
|
||||
- starts http server on port `7000`
|
||||
- forwards requests to `AP2Handler`
|
||||
- SETUP
|
||||
- should receive a bplist
|
||||
- if it contains `streams`
|
||||
- TODO
|
||||
- else
|
||||
- seems to be sending event?
|
||||
-
|
||||
- GET
|
||||
- POST
|
||||
- service Discovery uses mdns/bonjour
|
||||
|
||||
- feature flags are in a SRV record
|
||||
- TODO: how do I set up an mdns responder
|
||||
- [mdns_sd](https://docs.rs/mdns-sd/latest/mdns_sd/)
|
||||
|
||||
- seems like the actual transfers themselves use http over a different port
|
||||
|
||||
```
|
||||
= wlp0s20f3 IPv6 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
|
||||
hostname = [akristip-l-PF4BWXDJ.local]
|
||||
address = [fd71:e5f3:3440:f95e:dbf9:f904:c567:1ab9]
|
||||
port = [5000]
|
||||
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
|
||||
= lo IPv4 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
|
||||
hostname = [akristip-l-PF4BWXDJ.local]
|
||||
address = [127.0.0.1]
|
||||
port = [5000]
|
||||
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
|
||||
= wlp0s20f3 IPv4 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
|
||||
hostname = [akristip-l-PF4BWXDJ.local]
|
||||
address = [192.168.1.212]
|
||||
port = [5000]
|
||||
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
|
||||
= virbr0 IPv4 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
|
||||
hostname = [akristip-l-PF4BWXDJ.local]
|
||||
address = [192.168.122.1]
|
||||
port = [5000]
|
||||
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
|
||||
= docker0 IPv4 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
|
||||
hostname = [akristip-l-PF4BWXDJ.local]
|
||||
address = [172.17.0.1]
|
||||
port = [5000]
|
||||
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
|
||||
^CGot SIGINT, quitting.
|
||||
```
|
||||
|
||||
```json
|
||||
["pw=false",
|
||||
"txtvers=1",
|
||||
"ch=2",
|
||||
"cn=0,1", "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
|
||||
```
|
|
@ -1,2 +0,0 @@
|
|||
https://file-extensions.com/docs/pkpasss
|
||||
https://developer.apple.com/documentation/walletpasses
|
|
@ -1,74 +0,0 @@
|
|||
---
|
||||
draft: true
|
||||
---
|
||||
|
||||
# An amalgamation of shit from tiktok before the banhammer hits
|
||||
|
||||
## Art
|
||||
|
||||
- Do anime lineart with a hard edge and soften in post
|
||||
|
||||
## Music
|
||||
|
||||
- Look into prog drums
|
||||
- [VS Cynthia Breakdown](https://www.tiktok.com/@iamthebloodtyrant/video/7453556790337277226)
|
||||
- [Fight Against an Armed Boss](https://www.tiktok.com/@iamthebloodtyrant/video/7440573997340937518)
|
||||
- [Chinese brainrot movie clips](https://www.tiktok.com/@pianosoin/video/7440491022359989536)
|
||||
- [BW Gym Leader](https://www.tiktok.com/@parakeetdsi/video/7402611828343229703)
|
||||
- [VS Red](https://www.tiktok.com/@parakeetdsi/video/7417834269889940737)
|
||||
- [BW Low Health](https://www.tiktok.com/t/ZTYEq29QF/)
|
||||
- [BW Route 10](https://www.vxtiktok.com/t/ZTYoRUdGx/)
|
||||
- [BW surf](https://www.vxtiktok.com/t/ZTYoRCfvF/)
|
||||
- [Jubilife City](https://www.vxtiktok.com/t/ZTYoR4DQo/)
|
||||
- [Cyrus Battle](https://www.tiktok.com/t/ZTYoRhsrP/)
|
||||
- [Accumula Town](https://www.tiktok.com/t/ZTYoRDjCS/)
|
||||
- https://www.tiktok.com/t/ZT21spx4B/
|
||||
- [dppt drums](https://www.tiktok.com/t/ZT2eKGTMn/)
|
||||
- [giant chasm](https://www.tiktok.com/t/ZT2eKqSnG/)
|
||||
- [vs Iris ](https://www.tiktok.com/t/ZT2eERv22/)
|
||||
- [route 209](https://www.tiktok.com/t/ZT2eEFSbw/)
|
||||
- [giratina][https://www.tiktok.com/t/ZT2eKEAdt/]
|
||||
- [lake trio](https://www.tiktok.com/t/ZT2eE6Pk8/)
|
||||
- [dialga palkia](https://www.tiktok.com/t/ZT2eENDto/)
|
||||
|
||||
## Food
|
||||
|
||||
- [The Hat Man](https://www.tiktok.com/@maarkvark/video/7455468427742825759)
|
||||
- Little bit of lemon juice
|
||||
- midori
|
||||
- bit of tequila
|
||||
- grapefruit juice
|
||||
- ultra fantasy ruby red monster
|
||||
- [Indian food of some sort](https://www.tiktok.com/@mydelhi/video/7431614619237551392)
|
||||
|
||||
## ETC
|
||||
|
||||
### Hikes?
|
||||
|
||||
- Whitewater Falls NC
|
||||
- Eno River
|
||||
|
||||
### Stuff to buy
|
||||
|
||||
- Luigi Mangione Bag (Peak Design something or other)
|
||||
|
||||
## Fashion
|
||||
|
||||
- Layering for winter
|
||||
- Leggings under Jeans
|
||||
- Long sleeve shirt
|
||||
- cardigan/sweater/jacket
|
||||
- Dental Trays + 16% carbamide peroxide
|
||||
|
||||
## Trans
|
||||
|
||||
- Nasally <=> High Voice
|
||||
- Need to look into **fixing vocal fold mass**
|
||||
- less volume, more airflow
|
||||
- fleece lined tights
|
||||
- Need to fix size/resonance before reducing weight
|
||||
|
||||
## Tech
|
||||
|
||||
- `media.mediasource.enabled = false` in firefox settings to make it buffer the whole video
|
||||
- may break livestreams
|
|
@ -1,26 +0,0 @@
|
|||
---
|
||||
title: vim
|
||||
---
|
||||
|
||||
- Sort selected lines: `:sort`
|
||||
- Open man page: `:man [command]` or `\K`
|
||||
- Open URL: `gx`
|
||||
- Move between splits: `ctrl+w [direction]`
|
||||
- [vim-commentary](https://github.com/tpope/vim-commentary): `gc [motion]` to comment out
|
||||
- Case switching:
|
||||
- `gU` to uppercase
|
||||
- `gu` to lowercase -`g~` to toggle
|
||||
- Substitute:
|
||||
- `/g` **global** - sub all in line
|
||||
- `:%s/` - substitute in all lines
|
||||
- `:5,12s/` substitute from lines 5 to 12
|
||||
- `:.,+2s/` substitute this line (`.`) and the next 2
|
||||
- `:g/^foo/s/bar/baz/g` substitute all instances of bar with baz on lines beginning with foo
|
||||
- `/c` - ask for confirmation
|
||||
- Windows
|
||||
- `:sp [filename]` horizontal split, optionally open file
|
||||
- `vsp` vertical split
|
||||
- `ctrl+w w` move between windows
|
||||
- `ctrl+w =` resize windows to be equal
|
||||
- `ctrl+w q` close window
|
||||
- `ctrl+w <direction>` move window
|
|
@ -1,217 +0,0 @@
|
|||
---
|
||||
title: Links and Socials!
|
||||
---
|
||||
|
||||
<table class="about-me">
|
||||
<tr>
|
||||
<td><img src="https://argentumcation.com/links/images/mira.jpg" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="width-min">
|
||||
<h1>ArgentumCation</h1>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>She/They</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br />
|
||||
<span class="socials-text">I don't know who you are or how you found this, but while you're here, feel
|
||||
free to add me everywhere</span>
|
||||
<div class="social-container">
|
||||
<table class="socials">
|
||||
<tr>
|
||||
<th colspan="3">Social Media</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-twitter"></i></td>
|
||||
<td class="social-name">Xitter</td>
|
||||
<td class="social-link">
|
||||
<a href="https://x.com/ArgentumCation">@ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-mastodon"></i></td>
|
||||
<td class="social-name">Mastodon</td>
|
||||
<td class="social-link">
|
||||
<a href="https://social.treehouse.systems/@argentumcation">@ArgentumCation@treehouse.systems</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-bluesky"></i></td>
|
||||
<td class="social-name">Bluesky</td>
|
||||
<td class="social-link">
|
||||
<a href="https://bsky.app/profile/bsky.argentumcation.zip">@bsky.argentumcation.zip</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-bluesky"></i></td>
|
||||
<td class="social-name">Bluesky (Mastodon Bridge)</td>
|
||||
<td class="social-link">
|
||||
<a href="https://bsky.app/profile/fedi.argentumcation.zip">@fedi.argentumcation.zip</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-tumblr"></i></td>
|
||||
<td class="social-name">Tumblr</td>
|
||||
<td class="social-link">
|
||||
<a href="https://argentumcation.tumblr.com/">argentumcation</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="socials">
|
||||
<tr>
|
||||
<th colspan="3">Content</th>
|
||||
</tr>
|
||||
<!--Blog-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-solid fa-blog"></i></td>
|
||||
<td class="social-name">Blog</td>
|
||||
<td class="social-link">
|
||||
<a href="https://argentumcation.com/">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--Youtube-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-youtube"></i></td>
|
||||
<td class="social-name">YouTube</td>
|
||||
<td class="social-link">
|
||||
<a href="https://www.youtube.com/channel/@argentumcation">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--Twitch-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-twitch"></i></td>
|
||||
<td class="social-name">Twitch</td>
|
||||
<td class="social-link">
|
||||
<a href="https://www.twitch.tv/argentumcation">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--Soundcloud-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-soundcloud"></i></td>
|
||||
<td class="social-name">Soundcloud</td>
|
||||
<td class="social-link">
|
||||
<a href="https://soundcloud.com/argentumcation">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--Bandcamp-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-bandcamp"></i></td>
|
||||
<td class="social-name">Bandcamp</td>
|
||||
<td class="social-link">
|
||||
<a href="https://argentumcation.bandcamp.com/">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table class="socials">
|
||||
<tr>
|
||||
<th colspan="3">Messaging</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-discord"></i></td>
|
||||
<td class="social-name">Discord</td>
|
||||
<td class="social-link">
|
||||
<a href="https://discord.com/users/215902078747410433">argentumcation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-solid fa-envelope"></i></td>
|
||||
<td class="social-name">Email</td>
|
||||
<td class="social-link">
|
||||
<a href="mailto:argentumcation(at)argentumcation.com">argentumcation(at)argentumcation.com</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="socials">
|
||||
<tr>
|
||||
<th colspan="3">Code</th>
|
||||
</tr>
|
||||
<!--Github-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-github"></i></td>
|
||||
<td class="social-name">GitHub</td>
|
||||
<td class="social-link">
|
||||
<a href="https://github.com/ArgentumCation">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--Forgejo-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-git-alt"></i></td>
|
||||
<td class="social-name">Forgejo</td>
|
||||
<td class="social-link">
|
||||
<a href="https://git.argentumcation.com/mira">mira</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table class="socials">
|
||||
<tr>
|
||||
<th colspan="3">Misc</th>
|
||||
</tr>
|
||||
<!--Steam-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-steam"></i></td>
|
||||
<td class="social-name">Steam</td>
|
||||
<td class="social-link">
|
||||
<a href="https://steamcommunity.com/id/argentumcation">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--MyAnimeList-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-solid fa-question"></i></td>
|
||||
<td class="social-name">MyAnimeList</td>
|
||||
<td class="social-link">
|
||||
<a href="https://myanimelist.net/profile/ArgentumCation">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--Itch.io-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-itch-io"></i></td>
|
||||
<td class="social-name">Itch.io</td>
|
||||
<td class="social-link">
|
||||
<a href="https://argentumcation.itch.io/">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--PGP Key-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-solid fa-key"></i></td>
|
||||
<td class="social-name">PGP Key</td>
|
||||
<td class="social-link">
|
||||
<a
|
||||
href="http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xdd8583a510deb949714ed847430c50ca90f98bbe">0xdd8583a510deb949714ed847430c50ca90f98bbe</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table class="socials">
|
||||
<tr>
|
||||
<th colspan="3">Support the Mira!</th>
|
||||
</tr>
|
||||
<!--Ko-fi-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-solid fa-mug-hot"></i></td>
|
||||
<td class="social-name">Ko-fi</td>
|
||||
<td class="social-link">
|
||||
<a href="https://ko-fi.com/argentumcation">ArgentumCation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--BTC-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-btc"></i></td>
|
||||
<td class="social-name">Bitcoin</td>
|
||||
<td class="social-link">
|
||||
<a href="bitcoin:1NzncEg3C2Q72vbArCMU4wN2yPTnx5GU2h">1NzncEg3C2Q72vbArCMU4wN2yPTnx5GU2h</a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--Ethereum-->
|
||||
<tr>
|
||||
<td class="social-icon"><i class="fa-brands fa-ethereum"></i></td>
|
||||
<td class="social-name">Ethereum</td>
|
||||
<td class="social-link">
|
||||
<a href="ethereum:0xAdb87d93BAFda19ef168891d76c944879E06a7bd">0xAdb87d93BAFda19ef168891d76c944879E06a7bd</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
|
@ -1,16 +0,0 @@
|
|||
---
|
||||
draft: true
|
||||
---
|
||||
|
||||
| Hostname | Hardware | Width | Height | Front Ports | Side Ports | Back Ports |
|
||||
| ----------- | -------- | ------- | ------- | ---------------------------- | ------------------- | -------------- |
|
||||
| -- | -- | 254mm | 44.45mm | | | |
|
||||
| | Switches | -- | 1U | 16x | | 2x Barrel Jack |
|
||||
| Auxin | | -- | 4U | -- | -- | ?? |
|
||||
| Ethylene | 0W | 65mm | 5mm | - xμ<br>- m | | |
|
||||
| Relaxin | B+ | 56mm | 17mm | - <br>- 4 | - <br>- μ | |
|
||||
| Vasopressin | 4 | 56mm | 17mm | - <br>- 4 | - 2μ<br>- C | |
|
||||
| Galanin | x270 | 208.5mm | 21mm | - <br>- 1 | - C<br>- <br>- 1 | |
|
||||
| Zeatin | Duo S | 43mm | 17mm? | - <br>- 1 | | - C<br>- |
|
||||
| Kinetin | Duo S | 21mm | 2mm? | | | - C |
|
||||
| Leptin | | 197mm | 36mm | - 2C<br>- 2A<br>- <br>- | | |
|
|
@ -1,88 +0,0 @@
|
|||
---
|
||||
draft: true
|
||||
---
|
||||
|
||||
# you're telling me a Ham Fisted this Metaphor?
|
||||
|
||||
- hamstudy.org
|
||||
- FRN: 0036253789
|
||||
|
||||
- callsign format
|
||||
|
||||
- standard 2x3
|
||||
- KA4\*\*\*
|
||||
- vanity 1x3
|
||||
K4\*\*\*
|
||||
|
||||
- potential callsigns?
|
||||
- KM1RA\*
|
||||
- K4RIM
|
||||
- KM4IRA
|
||||
- KA4RIM
|
||||
- W4RIM
|
||||
- N4RIM
|
||||
- N4YAN
|
||||
- N4YAA
|
||||
- W4HYY
|
||||
- N4NII
|
||||
- K4PPA
|
||||
- W4STE
|
||||
- K4FKA
|
||||
- N4BLA
|
||||
- W4RPS
|
||||
- W4RNS
|
||||
- W4RDS
|
||||
- W4RES
|
||||
|
||||
# Section 1
|
||||
|
||||
# T0
|
||||
|
||||
- Bonding ground rods is a good idea so that you can parallelize grounding
|
||||
- allowable RF density scales inversely to duty cycle
|
||||
|
||||
# T1
|
||||
|
||||
- ARS can only transmit music if it's from a space station
|
||||
- you can never intentionally transmit music
|
||||
- if a non-licensed person is talking to a foreign station, the US needs to have an agreement with that country
|
||||
- For stuff above HF, max power is 1500W
|
||||
|
||||
# T2
|
||||
|
||||
- CQ is a call to any station (`@anyone`)
|
||||
- `CQ CQ CQ <callsign>` on Lower HF bands
|
||||
- `CQ <callsign>` on VHF/UHF/Repeater
|
||||
- QSY is change frequency
|
||||
- +/- 5MHz is a common freq offset for repeaters in 70cm band
|
||||
|
||||
# T4
|
||||
|
||||
- Electronic Keyer helps with morse code
|
||||
- Tuning an FM receiver off frequency causes distortion
|
||||
|
||||
# T3
|
||||
|
||||
- UHF Signals are not propagated by ionosphere
|
||||
- Only way to identify amateur bands is wavelength
|
||||
- Sporadic E is weird refraction of signals through layer E of ionosphere
|
||||
|
||||
# T6
|
||||
|
||||
- Single pole means one set of contacts
|
||||
- Single Throw means one choice per set of contacts
|
||||
|
||||
# T7
|
||||
|
||||
- Make sure circuit is off when using ohmmeter
|
||||
|
||||
# T8
|
||||
|
||||
- DMR (Digital Mobile Radio) uses TDM to put two signals on same repeater
|
||||
- CW is morse code, needs very little bandwidth
|
||||
|
||||
# T9
|
||||
|
||||
- A 5/8 wavelength antenna has more gain than a 1/4 wavelength
|
||||
- bigger fraction means lower angle and higher gain
|
||||
- lower angle always better
|
|
@ -1,426 +0,0 @@
|
|||
---
|
||||
author: ArgentumCation
|
||||
date: "2023-09-25"
|
||||
slug: gpg
|
||||
tags:
|
||||
- encryption
|
||||
- gpg
|
||||
title: Intro to GPG
|
||||
---
|
||||
|
||||
## What is GPG
|
||||
|
||||
Paraphrasing from the Arch Wiki, GPG is basically an implementation of PGP (Pretty Good Privacy)/ RFC 4880. You can use it to sign stuff, encrypt stuff, and authenticate yourself (eg over SSH or S/MIME).
|
||||
|
||||
## Using GPG for SSH
|
||||
|
||||
1. Generate Master Key
|
||||
|
||||
- This is the key you'll use to create subkeys. As such you'll want to keep this safe somewhere
|
||||
|
||||
- ```sh
|
||||
$ gpg --full-generate-key --expert
|
||||
gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
|
||||
Please select what kind of key you want:
|
||||
(1) RSA and RSA
|
||||
(2) DSA and Elgamal
|
||||
(3) DSA (sign only)
|
||||
(4) RSA (sign only)
|
||||
(7) DSA (set your own capabilities)
|
||||
(8) RSA (set your own capabilities)
|
||||
(9) ECC (sign and encrypt) *default*
|
||||
(10) ECC (sign only)
|
||||
(11) ECC (set your own capabilities)
|
||||
(13) Existing key
|
||||
(14) Existing key from card
|
||||
Your selection? 11
|
||||
```
|
||||
|
||||
- We want to pick ECC, since that's the more secure algorithm of these
|
||||
|
||||
- Next, we want to disable signing, since we'll only use this key to make more keys (i.e. we'll be certifying other keys)
|
||||
|
||||
- ```sh
|
||||
Possible actions for this ECC key: Sign Certify Authenticate
|
||||
Current allowed actions: Sign Certify
|
||||
|
||||
(S) Toggle the sign capability
|
||||
(A) Toggle the authenticate capability
|
||||
(Q) Finished
|
||||
|
||||
Your selection? S
|
||||
|
||||
Possible actions for this ECC key: Sign Certify Authenticate
|
||||
Current allowed actions: Certify
|
||||
|
||||
(S) Toggle the sign capability
|
||||
(A) Toggle the authenticate capability
|
||||
(Q) Finished
|
||||
|
||||
Your selection? Q
|
||||
```
|
||||
|
||||
- ```
|
||||
Please select which elliptic curve you want:
|
||||
(1) Curve 25519 *default*
|
||||
(2) Curve 448
|
||||
(3) NIST P-256
|
||||
(4) NIST P-384
|
||||
(5) NIST P-521
|
||||
(6) Brainpool P-256
|
||||
(7) Brainpool P-384
|
||||
(8) Brainpool P-512
|
||||
(9) secp256k1
|
||||
Your selection?
|
||||
Please specify how long the key should be valid.
|
||||
0 = key does not expire
|
||||
<n> = key expires in n days
|
||||
<n>w = key expires in n weeks
|
||||
<n>m = key expires in n months
|
||||
<n>y = key expires in n years
|
||||
Key is valid for? (0) 1y
|
||||
Key expires at Tue Sep 24 21:26:26 2024 UTC
|
||||
Is this correct? (y/N) y
|
||||
```
|
||||
|
||||
- Here we pick an elliptic curve, I just went with the default since I have no opinions about these
|
||||
- As for expiry date, I just put it at 1 year. You can change this later if you want
|
||||
|
||||
- ```
|
||||
GnuPG needs to construct a user ID to identify your key.
|
||||
|
||||
Real name: Mira Velturu
|
||||
Email address: mira@xn--2dkua.xn--tckwe
|
||||
Comment: GPG Demo
|
||||
You selected this USER-ID:
|
||||
"Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>"
|
||||
|
||||
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
|
||||
```
|
||||
|
||||
- The last step is linking your data to the key, and entering a password
|
||||
|
||||
- After this, you'll see something like:
|
||||
|
||||
- ```
|
||||
gpg: revocation certificate stored as '/home/mira/.local/share/gnupg/openpgp-revocs.d/6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9.rev'
|
||||
public and secret key created and signed.
|
||||
|
||||
pub ed25519 2023-09-25 [C] [expires: 2024-09-24]
|
||||
6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
|
||||
uid Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
|
||||
```
|
||||
|
||||
- The revocation cert lets you mark this key as invalid in case it gets leaked or something similar, keep this safe
|
||||
|
||||
- Double check to make sure the output contains `[C]` and no other letters between the braces
|
||||
|
||||
2. Alright now time to add subkeys so we can Sign/Authenticate/Encrypt stuff
|
||||
|
||||
- First we'll add a subkey for signing and authentication
|
||||
|
||||
- ```sh
|
||||
$ gpg --expert --edit-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
|
||||
gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
|
||||
Secret key is available.
|
||||
|
||||
sec ed25519/58C90C69DF7F1AF9
|
||||
created: 2023-09-25 expires: 2024-09-24 usage: C
|
||||
trust: ultimate validity: ultimate
|
||||
[ultimate] (1). Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
|
||||
```
|
||||
|
||||
- that long string you see is from the command where we made the key
|
||||
- if you lost it, you can find it with `gpg --list-keys`
|
||||
|
||||
- Now we add a subkey, the process is pretty similar to how we made the master key
|
||||
|
||||
- ```
|
||||
gpg> addkey
|
||||
Please select what kind of key you want:
|
||||
(3) DSA (sign only)
|
||||
(4) RSA (sign only)
|
||||
(5) Elgamal (encrypt only)
|
||||
(6) RSA (encrypt only)
|
||||
(7) DSA (set your own capabilities)
|
||||
(8) RSA (set your own capabilities)
|
||||
(10) ECC (sign only)
|
||||
(11) ECC (set your own capabilities)
|
||||
(12) ECC (encrypt only)
|
||||
(13) Existing key
|
||||
(14) Existing key from card
|
||||
Your selection? 11
|
||||
|
||||
Possible actions for this ECC key: Sign Authenticate
|
||||
Current allowed actions: Sign
|
||||
|
||||
(S) Toggle the sign capability
|
||||
(A) Toggle the authenticate capability
|
||||
(Q) Finished
|
||||
|
||||
Your selection? A
|
||||
|
||||
Possible actions for this ECC key: Sign Authenticate
|
||||
Current allowed actions: Sign Authenticate
|
||||
|
||||
(S) Toggle the sign capability
|
||||
(A) Toggle the authenticate capability
|
||||
(Q) Finished
|
||||
|
||||
Your selection? Q
|
||||
Please select which elliptic curve you want:
|
||||
(1) Curve 25519 *default*
|
||||
(2) Curve 448
|
||||
(3) NIST P-256
|
||||
(4) NIST P-384
|
||||
(5) NIST P-521
|
||||
(6) Brainpool P-256
|
||||
(7) Brainpool P-384
|
||||
(8) Brainpool P-512
|
||||
(9) secp256k1
|
||||
Your selection?
|
||||
Please specify how long the key should be valid.
|
||||
0 = key does not expire
|
||||
<n> = key expires in n days
|
||||
<n>w = key expires in n weeks
|
||||
<n>m = key expires in n months
|
||||
<n>y = key expires in n years
|
||||
Key is valid for? (0) 1y
|
||||
Key expires at Tue Sep 24 21:55:51 2024 UTC
|
||||
Is this correct? (y/N) y
|
||||
Really create? (y/N) y
|
||||
gpg> save
|
||||
```
|
||||
|
||||
- The main difference here is that we have both the Sign and Authenticate capabilities
|
||||
|
||||
- Your output will look something like:
|
||||
|
||||
- ```
|
||||
sec ed25519/58C90C69DF7F1AF9
|
||||
created: 2023-09-25 expires: 2024-09-24 usage: C
|
||||
trust: ultimate validity: ultimate
|
||||
ssb ed25519/2A7D7227C6F75FF1
|
||||
created: 2023-09-25 expires: 2024-09-24 usage: SA
|
||||
[ultimate] (1). Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
|
||||
```
|
||||
|
||||
- We'll need to do this process one more time to create an encryption subkey
|
||||
|
||||
- ```sh
|
||||
$ gpg --expert --edit-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9 36s686ms
|
||||
gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
|
||||
Secret key is available.
|
||||
|
||||
sec ed25519/58C90C69DF7F1AF9
|
||||
created: 2023-09-25 expires: 2024-09-24 usage: C
|
||||
trust: ultimate validity: ultimate
|
||||
ssb ed25519/2A7D7227C6F75FF1
|
||||
created: 2023-09-25 expires: 2024-09-24 usage: SA
|
||||
[ultimate] (1). Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
|
||||
```
|
||||
|
||||
- ```
|
||||
gpg> addkey
|
||||
Please select what kind of key you want:
|
||||
(3) DSA (sign only)
|
||||
(4) RSA (sign only)
|
||||
(5) Elgamal (encrypt only)
|
||||
(6) RSA (encrypt only)
|
||||
(7) DSA (set your own capabilities)
|
||||
(8) RSA (set your own capabilities)
|
||||
(10) ECC (sign only)
|
||||
(11) ECC (set your own capabilities)
|
||||
(12) ECC (encrypt only)
|
||||
(13) Existing key
|
||||
(14) Existing key from card
|
||||
Your selection? 12
|
||||
Please select which elliptic curve you want:
|
||||
(1) Curve 25519 *default*
|
||||
(2) Curve 448
|
||||
(3) NIST P-256
|
||||
(4) NIST P-384
|
||||
(5) NIST P-521
|
||||
(6) Brainpool P-256
|
||||
(7) Brainpool P-384
|
||||
(8) Brainpool P-512
|
||||
(9) secp256k1
|
||||
Your selection?
|
||||
Please specify how long the key should be valid.
|
||||
0 = key does not expire
|
||||
<n> = key expires in n days
|
||||
<n>w = key expires in n weeks
|
||||
<n>m = key expires in n months
|
||||
<n>y = key expires in n years
|
||||
Key is valid for? (0) 1y
|
||||
Key expires at Tue Sep 24 22:03:43 2024 UTC
|
||||
Is this correct? (y/N) y
|
||||
Really create? (y/N) y
|
||||
We need to generate a lot of random bytes. It is a good idea to perform
|
||||
some other action (type on the keyboard, move the mouse, utilize the
|
||||
disks) during the prime generation; this gives the random number
|
||||
generator a better chance to gain enough entropy.
|
||||
|
||||
sec ed25519/58C90C69DF7F1AF9
|
||||
created: 2023-09-25 expires: 2024-09-24 usage: C
|
||||
trust: ultimate validity: ultimate
|
||||
ssb ed25519/2A7D7227C6F75FF1
|
||||
created: 2023-09-25 expires: 2024-09-24 usage: SA
|
||||
ssb cv25519/2AD22394690453C2
|
||||
created: 2023-09-25 expires: 2024-09-24 usage: E
|
||||
[ultimate] (1). Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
|
||||
gpg> save
|
||||
```
|
||||
|
||||
3. Okay now you have a key, lets make it work with SSH now
|
||||
|
||||
- ```sh
|
||||
$ echo enable-ssh-support >> ~/.local/share/gnupg/gpg-agent.conf
|
||||
```
|
||||
|
||||
- Now you're gonna need to set `SSH_AUTH SOCK` so that we use `gpg-agent` instead of `ssh-agent` for handling SSH credentials (don't worry this won't mess with your existing SSH credentials)
|
||||
|
||||
- Add the following to your `.bashprofile` or `.zshrc`
|
||||
|
||||
- ```sh
|
||||
unset SSH_AGENT_PID
|
||||
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
|
||||
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
|
||||
fi
|
||||
export GPG_TTY=$(tty)
|
||||
gpg-connect-agent updatestartuptty /bye >/dev/null
|
||||
```
|
||||
|
||||
- To use your keys for SSH Auth we'll need to add it to the sshcontrol file
|
||||
|
||||
- ```sh
|
||||
$ gpg --list-keys --with-keygrip
|
||||
/home/mira/.local/share/gnupg/pubring.kbx
|
||||
-----------------------------------------
|
||||
pub ed25519 2023-09-25 [C] [expires: 2024-09-24]
|
||||
6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
|
||||
Keygrip = 929E520FB577F34E064E670A6500B21D4835B226
|
||||
uid [ultimate] Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
|
||||
sub ed25519 2023-09-25 [SA] [expires: 2024-09-24]
|
||||
Keygrip = 25F5E8427F0F9338A00F98225D125C09EAEBFF24
|
||||
sub cv25519 2023-09-25 [E] [expires: 2024-09-24]
|
||||
Keygrip = ED48EF4A2FDD7F03F779EC58B06B1AB0F4B75652
|
||||
```
|
||||
|
||||
- `echo 25F5E8427F0F9338A00F98225D125C09EAEBFF24 >> ~/.local/share/gnupg/sshcontrol`
|
||||
|
||||
- run `ssh-add -l` to verify
|
||||
|
||||
- I couldn't actually get this part working but trust me bro :tm:
|
||||
|
||||
- ```sh
|
||||
$ gpg --export-ssh-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGWaV6YjtxALsgpvSoBtyW1nFaTTifOQKQmmj9bQsrtJ openpgp:0xC6F75FF1
|
||||
```
|
||||
|
||||
- this'll spit out your public SSH Key for the given Key ID
|
||||
|
||||
4. Back up your keys and yeet the master key
|
||||
|
||||
- ```sh
|
||||
$ gpg -a --export-secret-keys > master-secret-key.asc
|
||||
$ gpg -a --export-secret-subkeys > sub-secret-keys.asc
|
||||
$ gpg --delete-secret-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
|
||||
$ gpg --import sub-secret-keys.gpg
|
||||
```
|
||||
|
||||
- put these two files somewhere safe, like physical media
|
||||
|
||||
## Encryption
|
||||
|
||||
### Asymmetric
|
||||
|
||||
- Okay this one's pretty simple:
|
||||
|
||||
- ```sh
|
||||
$ gpg --recipient user-ids --encrypt doc
|
||||
```
|
||||
|
||||
- this will encrypt `doc` using your private key and the public keys of your recipients
|
||||
|
||||
- ```sh
|
||||
$ gpg --output doc --decrypt doc.gpg
|
||||
```
|
||||
|
||||
- this will decrypt `doc.gpg` if you have a matching private key
|
||||
|
||||
### Symmetric
|
||||
|
||||
- Even easier, no keys required
|
||||
|
||||
- ```sh
|
||||
$ gpg -c doc
|
||||
```
|
||||
|
||||
- this will encrypt and decrypt `doc` using a pre-shared key
|
||||
|
||||
### Signing
|
||||
|
||||
- Don't @ me I know this isn't actually encryption, but being able to provide signatures is important since it'll show a) the file comes from you, and b) the file hasn't been tampered with or corrupted
|
||||
|
||||
- ```sh
|
||||
$ gpg --output doc.sig --sign doc
|
||||
```
|
||||
|
||||
- this'll attach the signature to your file and output a compressed version
|
||||
- I don't really recommend this since `doc.sig` will be a binary blob
|
||||
- if you want to not compress this and leave the contents of `doc` readable in `doc.sig` use `--clearsign` instead of `--sign`
|
||||
|
||||
- ```sh
|
||||
$ gpg --output doc.sig --detach-sig doc
|
||||
```
|
||||
|
||||
- This will put just the signature into `doc.sig` which you can send to someone alongside `doc`
|
||||
|
||||
- As for verifying signatures, just do
|
||||
|
||||
- ```sh
|
||||
$ gpg --verify doc.sig
|
||||
```
|
||||
|
||||
- If this is a detached signature, make sure `doc` is in the same folder
|
||||
|
||||
---
|
||||
|
||||
## ETC
|
||||
|
||||
- By convention, encrypted files end in `.gpg` if they are binary data, or `.asc` if stored with ASCII Armor (which is basically just base64)
|
||||
- `$ gpg --list-keys`: list pubkeys in your keyring
|
||||
- `$ gpg --list-secret-keys`: list private keys in your keyring
|
||||
- `$ gpg --export --armor --output public-key.asc [email or key ID]`: output your pubkey
|
||||
- `$ gpg --import public-key.asc`: import a pubkey
|
||||
- `$ gpg --gen-revoke --armor --output revcert.asc [email or key ID]`: output your revocation key
|
||||
- `$ gpg --keyserver keyserver.ubuntu.com --send-keys [key ID]`: to send your public key to the ubuntu keyserver
|
||||
- this seems to be the most popular one, keybase.io also exists among others
|
||||
-
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- if you run into issues with it not prompting for a password or see `no pinentry`
|
||||
- try adding `--pinentry=loopback` as a flag for gpg
|
||||
- for a permanent fix, look into adding a config option in `gpg-agent.conf`
|
||||
- honestly this should really be a `TODO` cause pinentry is its own mess
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
|
||||
- Adapted from https://gist.github.com/mcattarinussi/834fc4b641ff4572018d0c665e5a94d3
|
||||
|
||||
- https://wiki.archlinux.org/index.php/GnuPG
|
|
@ -1,142 +0,0 @@
|
|||
---
|
||||
draft: true
|
||||
summary: You know what, fuck you _rotates your interest rates 90°_
|
||||
title: Hypercomplex Interest
|
||||
---
|
||||
|
||||
# Compound Interest
|
||||
You know what, fuck you _rotates your interest rates 90°_
|
||||
|
||||
|
||||
Y'all remember this from like 4th grade right, I barely do so here's a refresh
|
||||
$$ z = Pe^{rt} $$
|
||||
|
||||
- $P$ is your principal, or how much money you initially put in or took out
|
||||
- $r$ is the interest rate, you want this to be low if you're borrowing and high if you're lending
|
||||
- $t$ is time, unless you have a TARDIS, this one is pretty out of your control
|
||||
- $z$ is how much money you owe/are owed, I know this isn't the standard variable name but bear with me
|
||||
|
||||
Now let's make it spicy
|
||||
|
||||
# Complex Interest
|
||||
|
||||
Who says you need to have a real number for your interest rate? The Fed moves interest rates up and down all the time, when will those cowards start moving it left and right.
|
||||
But first, what does it mean to move money to the left? \[Vsauce Sting]
|
||||
Let's keep things simple for now and just rotate it around 0 like it's a circle
|
||||
|
||||

|
||||
|
||||
We can represent this as a complex number in the form $z=Pe^{i\theta}$, where $\theta$ is some angle.
|
||||
Hold on a second this looks kinda like the the interest rate formula from earlier. Let's add in time as a factor to get: $z=Pe^{i\theta t}$.
|
||||
|
||||
Okay so we can see that this is basically just compound interest with an interest rate of $\theta$.
|
||||
What does this even mean, can I use this to get out of student loans? Do I owe MOHELA imaginary money?
|
||||
|
||||
Well I left out an important detail, $Pe^{i\theta}=P\cos(t\theta)+iP\sin(t\theta)$
|
||||
|
||||
The proof is trivial and would be left as an exercise to the reader but unfortunately I need to use it later on so here's why this works:
|
||||
|
||||
> [!TODO] Explain Euler's Identity here
|
||||
|
||||
So let's say I owe 1,000 USD at a 5% interest rate (I wish lmao), that would look like:
|
||||
|
||||
> [!TODO] Todo
|
||||
|
||||
That makes sense, but now let's look at what happens if we do $5i\%$
|
||||

|
||||
Well the real part ends up being
|
||||
$$\Re(z)=P\cos(\frac\pi 2rt)$$
|
||||
And the imaginary part ends up being
|
||||
|
||||
$$\Im(z)=P\sin(\frac\pi 2rt)$$
|
||||
So if I wait about 30 years after my initial loan, I can owe none money with left bread, if I wait 60 years, MOHELA needs to double my money for free.
|
||||
|
||||
Honestly I think the stock market is a better investment strategy. But that seems a bit too based either way, so no wonder I can't get my loans refinanced like this
|
||||
|
||||
Hm.
|
||||
|
||||
_Morpheus voice_ what if I told you there's more than one way to rotate a cow?
|
||||
|
||||
> [!TIP] Okay listen closely because this next part is how I got my partner to fall for me
|
||||
|
||||
# Split-Complex Interest
|
||||
|
||||
Normally when you rotate something you move it in a circle, which is cool and all, but what if you can rotate it in the opposite of a circle?
|
||||
|
||||

|
||||
Introducing: the Hyperbola
|
||||

|
||||
So with the unit circle we had an equation like $x^2+y^2=1$, well there's a unit Hyperbola too and the equation for that is $x^2-y^2=1$.
|
||||
There's actually a lot more stuff that circles have that have a hyperbolic equivalent.
|
||||
|
||||
Remember $\sin$ and $\cos$? There's also a $\sinh$ and $\cosh$, don't ask me to explain these because we didn't cover them at all in high school.
|
||||
|
||||
Here's the big one that we care about though, we know multiplying something by $i$ rotates it around a circle, there's actually a $j$ that rotates something around a hyperbola.
|
||||
|
||||
But what exactly is this mysterious $j$?. It's shrimple as really, $j=\sqrt{1}$.
|
||||
|
||||
> [!QUOTE] Isn't that just 1?
|
||||
|
||||
No. don't think about it too hard
|
||||
|
||||
> [!QUOTE] So what does $e^{\theta j}$ break down into, if anything?
|
||||
|
||||
I wouldn't be asking this rhetorical if there wasn't a semi-interesting answer
|
||||
It's actually $Pe^{j\theta t} = P\cosh(t\theta)+jP\sinh(t\theta)$
|
||||
|
||||
# Dual Interest rates
|
||||
|
||||
Okay this one isn't as interesting but I want to include it for completeness,
|
||||
We have $i=\sqrt{-1},\ j=\sqrt{1}$, now get ready for $\varepsilon=\sqrt{0}$. I guess was taken when they invented this one?
|
||||
|
||||
> [!Todo] todo
|
||||
|
||||
while we're on the topic of dual numbers, lets try shoving $x+\varepsilon$ into some functions for shits and giggles:
|
||||
$$(x+\varepsilon)^2=x^2+2x\varepsilon+\varepsilon^2=2x\varepsilon$$
|
||||
|
||||
> [!quote] Okay that was a waste of time, was that supposed to be interesting?
|
||||
|
||||
Yes. I'm getting there
|
||||
$$\sin(x+\varepsilon)=(x+\varepsilon)-\frac{(x+\varepsilon)^3}{3!}+\frac{(x+\varepsilon)^5}{5!}\ldots$$
|
||||
Okay now lets expand that out
|
||||
$$=(x+\varepsilon)-\frac{x^3+3x^2\varepsilon+3x\varepsilon^2+\varepsilon^3}{3!}+\frac{x^5+5x^4\varepsilon+10x^3\epsilon^2+10x^2\varepsilon^3+5x\varepsilon^4+\varepsilon^5}{5!}\ldots$$
|
||||
of course $\varepsilon$ to powers higher than 1 just ends up being zero so we can simplify this monstrosity down to
|
||||
$$=x+\varepsilon-\frac{x^3+3x^2\varepsilon}{3!}+\frac{x^5+5x^4\varepsilon}{5!}$$
|
||||
...except this still doesn't mean too much, lets try factoring $\varepsilon$ out
|
||||
$$(x-\frac{x^3}{3!}+\frac{x^5}{5!}+\ldots)+\varepsilon(1-\frac{x^2}{2!}+\frac{x^4}{4!})$$
|
||||
$$=\sin(x)+-\cos(x)\varepsilon$$
|
||||
|
||||
> [!QUOTE] Hold on, what the shit? we the 'imaginary' part is the derivative?
|
||||
|
||||
Yeah actually. If you remember back to 8th grade,
|
||||
$$f'(x)=\frac{d}{dx}f(x)=\lim_{h\to0}\frac{f(x+h)-f(x)}{h}$$
|
||||
We can kinda replace $h\to 0$ here with $\varepsilon$ since it's basically an infinitely tiny number that's not zero or negative, which gives us
|
||||
$$f'(x)=\frac{f(x+\varepsilon)-f(x)}{\varepsilon}$$
|
||||
|
||||
> [!note] Dividing by $\varepsilon$ is sus as fuck, but just bear with me here
|
||||
|
||||
$$\varepsilon f'(x)=f(x+\varepsilon)-f(x)$$
|
||||
$$f(x+\varepsilon)=f(x)=\varepsilon f'(x)$$
|
||||
There you go, typesetting this was a bitch.
|
||||
|
||||
# Errata
|
||||
|
||||
## Matrix Representations
|
||||
|
||||
Fun fact, you can also represent $i,j,\varepsilon$ as matrices too
|
||||
Its already kinda standard to use $\begin{bmatrix}1&0\\0&1\end{bmatrix}$ to cast real numbers into 2D matrices, but there's two zeros in there doing nothing, maybe we can yoink those for real estate.
|
||||
|
||||
Introducing:
|
||||
$$i=\begin{bmatrix}0&1\\-1&0\end{bmatrix},\ j=\begin{bmatrix}0&1\\1&0\end{bmatrix},\ \varepsilon=\begin{bmatrix}0&1\\0&0\end{bmatrix}$$
|
||||
These versions actually obey the same multiplication rules as our original derivations of the hypercomplex numbers. Now we can turn something like $6+3j$ into $\begin{bmatrix}6&3\\3&6\end{bmatrix}$
|
||||
|
||||
## Colors
|
||||
|
||||
As somewhat of a convention, I use red, green, and blue in this post to differentiate between graphs relating to complex numbers, split-complex numbers, and dual numbers respectively
|
||||
|
||||
## Honey, I broke the concept of division!
|
||||
|
||||
Yeah... division doesn't really work right when you bring $j$ and $\varepsilon$ into the mix since you can multiply non-zero stuff and get zero out
|
||||
|
||||
$$\frac{1}{1+j}\cdot\frac{1}{1-j}=\frac{1}{1-j^2}=\frac{1}{1-1}=\frac10$$
|
||||
$$\frac 1\varepsilon \cdot \frac 1\varepsilon=\frac 1{\varepsilon^2}=\frac 10$$
|
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 47 KiB |
11
eslint.config.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
import globals from "globals";
|
||||
import pluginJs from "@eslint/js";
|
||||
import tseslint from "typescript-eslint";
|
||||
|
||||
|
||||
export default [
|
||||
{files: ["**/*.{js,mjs,cjs,ts}"]},
|
||||
{languageOptions: { globals: globals.browser }},
|
||||
pluginJs.configs.recommended,
|
||||
...tseslint.configs.recommended,
|
||||
];
|
0
eslint.config.mjs
Normal file
27
hugo.toml
|
@ -1,27 +0,0 @@
|
|||
baseURL = 'https://argentumcation.com/'
|
||||
languageCode = 'en-us'
|
||||
title = 'ArgentumCation'
|
||||
# theme = 'ananke'
|
||||
[markup.highlight]
|
||||
linenos = true
|
||||
anchorlinenos = true
|
||||
noClasses = false
|
||||
[markup.goldmark]
|
||||
renderer.unsafe = true
|
||||
summaryLength = 1
|
||||
[markup.goldmark.extensions.passthrough]
|
||||
enable = true
|
||||
[markup.goldmark.extensions.passthrough.delimiters]
|
||||
block = [['\[', '\]'], ['$$', '$$']]
|
||||
inline = [['\(', '\)']]
|
||||
|
||||
[params]
|
||||
math = true
|
||||
|
||||
|
||||
[outputs]
|
||||
home = ['html', 'rss']
|
||||
section = ['html', 'rss']
|
||||
taxonomy = ['html']
|
||||
term = ['html']
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
{{ $emojis := dict "caution" ":exclamation:" "important" ":information_source:"
|
||||
"note" ":information_source:" "tip" ":bulb:" "warning" ":information_source:"
|
||||
"todo" ":memo:" "quote" ":speech_balloon:" "default" ":information_source:" }}
|
||||
<blockquote class="alert alert-{{ .AlertType }}">
|
||||
<table>
|
||||
<tr>
|
||||
<td class="width-min">
|
||||
{{ transform.Emojify (index $emojis .AlertType) }}
|
||||
</td>
|
||||
<td class="width-min">{{.AlertType}}</td>
|
||||
<td class="width-auto">{{ .AlertTitle}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</blockquote>
|
|
@ -1,4 +0,0 @@
|
|||
<pre class="mermaid">
|
||||
{{- .Inner | htmlEscape | safeHTML }}
|
||||
</pre>
|
||||
{{ .Page.Store.Set "hasMermaid" true }}
|
|
@ -1,23 +0,0 @@
|
|||
<html>
|
||||
<meta charset="UTF-8" />
|
||||
|
||||
<head>
|
||||
{{ partialCached "head.html" . .Title }}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{ partialCached "header.html" . }} {{ range .Pages }} {{ if .Draft }} {{
|
||||
else }}
|
||||
<table>
|
||||
<tr>
|
||||
<td class="width-auto"><a href="{{.Permalink}}">{{ .Title }}</a></td>
|
||||
<td class="width-min">{{ .Date.Format "2006-01-02" }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">{{.Summary}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
{{end}} {{end}} {{ partialCached "footer.html" . }}
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,20 +0,0 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
{{ partialCached "head.html" . .Title }} {{ if .Store.Get "hasMermaid" }}
|
||||
<script type="module">
|
||||
import mermaid from "https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs";
|
||||
mermaid.initialize({startOnLoad: true});
|
||||
</script>
|
||||
{{ end }}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Code that all your templates share, like a header -->
|
||||
{{ partialCached "header.html" . .Page}} {{.Content}}
|
||||
<!-- More shared code, perhaps a footer but that can be overridden if need be in -->
|
||||
{{ partialCached "footer.html" . .Page}}
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,16 +0,0 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
{{ partialCached "head.html" . "ArgentumCation"}}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{ partialCached "header.html" . }}
|
||||
<main>Look I know it's a kinda shit homepage, I'm working on it.</main>
|
||||
|
||||
{{ partialCached "footer.html" . }}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
</html>
|
|
@ -1,123 +0,0 @@
|
|||
<footer style="display: flex; flex-direction: column">
|
||||
<hr />
|
||||
<div class="h-card" style="display: inline; margin: auto">
|
||||
This work © {{ time.Now.Format "2006" }} by
|
||||
<!-- Author Info -->
|
||||
<a href="https://argentumcation.com/links" rel="author">
|
||||
<span class="p-nickname">ArgentumCation</span>
|
||||
(<span class="p-name">Mira</span>)
|
||||
</a>
|
||||
<!-- Author Metadata -->
|
||||
<div style="display: none">
|
||||
<span class="p-honorific-suffix">Kendo 3-Kyu Emeritus</span>
|
||||
<img style="float: left; margin-right: 4px" src="https://argentumcation.com/links/images/mira.jpg"
|
||||
alt="photo of Mira" class="u-photo" />
|
||||
<a class="u-email" href="mailto:mira@ミラ.コム">mira@ミラ.コム</a>
|
||||
<span class="dt-bday">20XX-04-02</span>
|
||||
<div>
|
||||
<link rel="pgpkey" type="application/pgp-keys" title="ArgentumCation's PGP Key"
|
||||
href="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xdd8583a510deb949714ed847430c50ca90f98bbe" />
|
||||
<pre class="u-key">
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
xjMEZIjWHxYJKwYBBAHaRw8BAQdAtI4ucxI1PHAJNSIj2TITGcW4BWK2muk3sFfh
|
||||
<footer>Footer</footer>
|
||||
cyTHvrXNMkFyZ2VudHVtQ2F0aW9uIDxhcmdlbnR1bWNhdGlvbkBhcmdlbnR1bWNh
|
||||
dGlvbi5jb20+wo4EExYKADYFCwkIBwIGFQoJCAsCBRYCAwEAAh4EFiEE3YWDpRDe
|
||||
uUlxTthHQwxQypD5i74FAmSOOF8CGwEACgkQQwxQypD5i74vTwD/Y3T/Jet8zvAK
|
||||
8MhZvEG1H+M/eQFZaAzvSA2FOWmTRo8A+wbyQCbun9Bb5fCZ4/kxHcaGzVgUJSst
|
||||
4j/RMrWUXdIMwo4EExYKADYCGyMWIQTdhYOlEN65SXFO2EdDDFDKkPmLvgUCZI35
|
||||
+gULCQgHAgYVCgkICwIFFgIDAQACHgQACgkQQwxQypD5i747swEA/ugdrs+omBA1
|
||||
2qNqysT9QPqcPnVjSSvYVpVYjNBVvNcBAIDoQJ4T3IEv353iY6oaZfRwoHeFNYWr
|
||||
xJwaGReiIDQFwpMEExYKADsWIQTdhYOlEN65SXFO2EdDDFDKkPmLvgUCZIjWHwIb
|
||||
IwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRBDDFDKkPmLvl3wAQCPR0mt
|
||||
8omFlGLTYi8XJqGu/ha+wGeGrNCh7LixYHfHkwD+Im2LqQkcNXLAJPDK1vGGOh0A
|
||||
D+bSiGT+5Ly40/gkPw7OOARkiNYfEgorBgEEAZdVAQUBAQdAFfcK11UfBm4IPs9w
|
||||
i7YrZ78OxMRm4wf0qdSCQ7vQTDoDAQgHwn4EGBYKACYCGwwWIQTdhYOlEN65SXFO
|
||||
2EdDDFDKkPmLvgUCZI442gUJAeaWOwAKCRBDDFDKkPmLvixuAP9xx1LE2u2qK85v
|
||||
w8tX0Xq0CYMcoJHlCkr5QClBd5v9MwD/anBykPYGnZaMXpqwAEFeY/YkhGWgThkK
|
||||
zzjj1FvXywDCeAQYFgoAIBYhBN2Fg6UQ3rlJcU7YR0MMUMqQ+Yu+BQJkiNYfAhsM
|
||||
AAoJEEMMUMqQ+Yu+mwsBAJV56nL80qeusyuAGrwX+Olgto8tXpmyCVFp825lJRPr
|
||||
AP93N28QeqAnPssteJrWMUN/vrPC8WMebSkvu9jj252dAc4zBGSOOGYWCSsGAQQB
|
||||
2kcPAQEHQOY3LSWsg9XK1rI7r2E+1tmX3Vi7W5opwkvqO6AsduZRwsA1BBgWCgAm
|
||||
FiEE3YWDpRDeuUlxTthHQwxQypD5i74FAmSOOGYCGyIFCQHhM4AAgQkQQwxQypD5
|
||||
i752IAQZFgoAHRYhBJg7grqI4mDBitvwbRVrumZ8pbPPBQJkjjhmAAoJEBVrumZ8
|
||||
pbPPVE8A/0PuUBsaR5QJP7CjiRB0oGmFs4Q/xTLV+PFoUNQNPNlGAQDxJNx844Bs
|
||||
spKDee99cgh6KMzRApNjNAmDBkKezFilBw2HAQDATl1ZehPrkQA1H6ytL0mELqQY
|
||||
lJj4vTGSsBtTxmZ2NgD9HBjGd6OEAjJR7pAmF+720JzDHgtELnFI1E+/5JkNyAw= =staE
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
</pre>
|
||||
</div>
|
||||
<span class="p-gender-identity">Who even knows anymore? (She/They)</span>
|
||||
<span class="u-sound"><!-- Yes I know the spec says sound file but fuck you -->miɹʌ</span>
|
||||
</div>
|
||||
<wbr />
|
||||
is licensed under
|
||||
<!-- License -->
|
||||
<a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" rel="license">CC BY-NC-SA 4.0</a>
|
||||
</div>
|
||||
<p style="margin: auto">
|
||||
<a href="https://fediring.net/previous?host=argentumcation.com"><-</a>
|
||||
<a href="https://fediring.net/">Fediring</a>
|
||||
<a href="https://fediring.net/next?host=argentumcation.com">-></a>
|
||||
</p>
|
||||
<marquee>
|
||||
<!--{-->
|
||||
<!--buttons.map((button) => {-->
|
||||
<!--const image = (-->
|
||||
<!--<Image class="marquee-button" src={`/buttons/${button.image}`} alt={button.name} width={88} height={31} />-->
|
||||
<!--);-->
|
||||
<!---->
|
||||
<!--return !button.link?.startsWith("javascript:") ? (-->
|
||||
<!--<a href={button.link ?? undefined} title={button.name} target="_blank">-->
|
||||
<!-- {image}-->
|
||||
<!--</a>-->
|
||||
<!--) : (-->
|
||||
<!--<button title={button.name} onclick={button.link}>-->
|
||||
<!-- {image}-->
|
||||
<!--</button>-->
|
||||
<!--);-->
|
||||
<!--})-->
|
||||
<!--}-->
|
||||
<button class="btn-88x31">
|
||||
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank"><img src="/buttons/cc-by-nc-sa.gif"
|
||||
alt="CC-BY-NC-SA" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="https://cyber.dabamos.de/88x31/index.html" target="_blank"><img src="/buttons/88x31.gif"
|
||||
alt="88x31" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="undefined" target="_blank"><img src="/buttons/anythingbut.gif" alt="Anything but Chrome" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="https://linustechtips.com/" target="_blank"><img src="/buttons/freetechtips.gif"
|
||||
alt="Linus Tech Tips" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="https://neovim.io/" target="_blank"><img src="/buttons/neovim.gif" alt="Made with Neovim" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="undefined" target="_blank"><img src="/buttons/mw_trans.gif" alt="Made with pride [trans flag]" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="https://diyhrt.wiki/" target="_blank"><img src="/buttons/transyourgender.gif"
|
||||
alt="Trans your gender" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="https://xkcd.com/1179/" target="_blank"><img src="/buttons/iso8601.png" alt="ISO 8601" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="undefined" target="_blank"><img src="/buttons/cloudfree.svg" alt="Runs on a computer" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="undefined" target="_blank"><img src="/buttons/cssdif.gif" alt="CSS is difficult" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="https://homestuck.com/" target="_blank"><img src="/buttons/e-hs.gif" alt="Download Sburb" /></a>
|
||||
</button>
|
||||
<button class="btn-88x31">
|
||||
<a href="https://bulbapedia.bulbagarden.net/wiki/Rotom_(Pok%C3%A9mon)" target="_blank"><img
|
||||
src="/buttons/rotom.gif" alt="Powered by Rotom" /></a>
|
||||
</button>
|
||||
</marquee>
|
||||
</footer>
|
|
@ -1,11 +0,0 @@
|
|||
{{ if .Param "math" }} {{ partialCached "math.html" .}} {{ end }}
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" href="/the-monospace-web/reset.css" />
|
||||
<link rel="stylesheet" href="/the-monospace-web/index.css" />
|
||||
<link rel="stylesheet" href="/css/syntax.css" />
|
||||
<link rel="stylesheet" href="/css/overrides.css" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
|
||||
integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||
<title>{{ block "title" . }} {{ .Title }} {{ end }}</title>
|
|
@ -1,23 +0,0 @@
|
|||
<table class="header">
|
||||
<tr>
|
||||
<td colspan="2" rowspan="1" class="width-auto">
|
||||
<h1 class="title">{{.Page.Title}}</h1>
|
||||
</td>
|
||||
<td class="width-min"><a href="/links">Links</a></td>
|
||||
<td class="width-min"><a href="/index.xml">RSS</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="width-min">Author</th>
|
||||
<td class="width-auto">
|
||||
<a href="https://argentumcation.com"><cite>ArgentumCation</cite></a>
|
||||
</td>
|
||||
<td class="width-auto"><a href="/posts">Posts</a></td>
|
||||
<td class="width-auto"><a href="/lab-notes">Notes</a></td>
|
||||
<tr>
|
||||
<th class="width-min">License</th>
|
||||
<td>CC-BY-NC-SA 4.0+</td>
|
||||
<th>Updated</th>
|
||||
<td class="width-min"><time style="white-space: pre">{{.Page.Date.Format "2006-01-02"}}</time></td>
|
||||
</tr>
|
||||
</tr>
|
||||
</table>
|
|
@ -1,12 +0,0 @@
|
|||
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
|
||||
<script>
|
||||
MathJax = {
|
||||
tex: {
|
||||
displayMath: [
|
||||
["\\[", "\\]"],
|
||||
["$$", "$$"],
|
||||
], // block
|
||||
inlineMath: [["\\(", "\\)"]], // inline
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,24 +0,0 @@
|
|||
<table class="palette">
|
||||
<tr>
|
||||
<td style="background-color: var(--background)"> </td>
|
||||
<td style="background-color: var(--black)"> </td>
|
||||
<td style="background-color: var(--red)"> </td>
|
||||
<td style="background-color: var(--green)"> </td>
|
||||
<td style="background-color: var(--yellow)"> </td>
|
||||
<td style="background-color: var(--blue)"> </td>
|
||||
<td style="background-color: var(--magenta)"> </td>
|
||||
<td style="background-color: var(--cyan)"> </td>
|
||||
<td style="background-color: var(--white)"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="background-color: var(--foreground)"> </td>
|
||||
<td style="background-color: var(--bright-black)"> </td>
|
||||
<td style="background-color: var(--bright-red)"> </td>
|
||||
<td style="background-color: var(--bright-green)"> </td>
|
||||
<td style="background-color: var(--bright-yellow)"> </td>
|
||||
<td style="background-color: var(--bright-blue)"> </td>
|
||||
<td style="background-color: var(--bright-magenta)"> </td>
|
||||
<td style="background-color: var(--bright-cyan)"> </td>
|
||||
<td style="background-color: var(--bright-white)"> </td>
|
||||
</tr>
|
||||
</table>
|
8109
package-lock.json
generated
Normal file
51
package.json
Normal file
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"name": "blog",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"watch": {
|
||||
"build": {
|
||||
"patterns": [
|
||||
"src"
|
||||
],
|
||||
"extensions": "md,js,mdx,css,html,css",
|
||||
"silent": true
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro",
|
||||
"watch": "pnpm npm-watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/check": "^0.2.0",
|
||||
"@astrojs/markdown-remark": "^3.2.0",
|
||||
"@astrojs/mdx": "^1.1.0",
|
||||
"@astrojs/node": "^6.0.1",
|
||||
"@astrojs/rss": "^3.0.0",
|
||||
"@r4ai/remark-callout": "^0.4.0",
|
||||
"accessible-astro-components": "^1.6.6",
|
||||
"astro": "^3.2.0",
|
||||
"astro-icon": "^0.8.1",
|
||||
"dayjs": "^1.11.10",
|
||||
"highlight.js": "^11.8.0",
|
||||
"htmx.org": "^1.9.6",
|
||||
"markdown-it": "^14.1.0",
|
||||
"mdast-util-to-string": "^4.0.0",
|
||||
"npm-watch": "^0.11.0",
|
||||
"reading-time": "^1.5.0",
|
||||
"rollup": "^3.29.4",
|
||||
"sanitize-html": "^2.13.0",
|
||||
"sass": "^1.68.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.6.0",
|
||||
"eslint": "9.x",
|
||||
"globals": "^15.8.0",
|
||||
"prettier": "^3.3.2",
|
||||
"prettier-plugin-astro": "^0.14.0",
|
||||
"typescript": "^5.4.5",
|
||||
"typescript-eslint": "^7.16.0"
|
||||
}
|
||||
}
|
5389
pnpm-lock.yaml
generated
Normal file
Before Width: | Height: | Size: 871 B After Width: | Height: | Size: 871 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 495 B |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 657 B After Width: | Height: | Size: 657 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 695 B |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
BIN
public/links/images/avatar.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
1
public/links/images/icons
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../../submodules/littlelink/images/icons
|
1
public/links/images/icons-extended
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../../submodules/littlelink-extended/images/icons-extended
|
Before Width: | Height: | Size: 238 KiB After Width: | Height: | Size: 238 KiB |
23
public/themes.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"theme_lunar_witch": "Lunar Witch",
|
||||
"theme_gruvbox_dark": "Gruvbox Dark",
|
||||
"theme_ubuntu": "Ubuntu",
|
||||
"theme_nord": "Nord",
|
||||
"theme_Catppuccin_Mocha": "Catppuccin Mocha",
|
||||
"theme_silk_dark": "Silk Dark",
|
||||
"theme_github": "Github",
|
||||
"theme_Borland": "Borland",
|
||||
"theme_C64": "C64",
|
||||
"theme_Wild_Cherry": "Wild Cherry",
|
||||
"theme_Synthwave": "Synthwave",
|
||||
"theme_Bluloco_Zsh_Light": "Blueloco Zsh Light",
|
||||
"theme_Adventure_Time": "Adventure Time",
|
||||
"theme_Symphonic": "Symphonic",
|
||||
"theme_Atom": "Atom",
|
||||
"theme_Ayu_Dark": "Ayu Dark",
|
||||
"theme_Catppuccin_Latte": "Catppuccin Latte",
|
||||
"theme_Everforest_Dark": "Everforest Dark",
|
||||
"theme_Everforest_Light": "Everforest Light",
|
||||
"theme_Dracula": "Dracula",
|
||||
"theme_callmangler": "CallMangler"
|
||||
}
|
9
remark-modified-time.mjs
Normal file
|
@ -0,0 +1,9 @@
|
|||
import { statSync } from "fs";
|
||||
|
||||
export function modifiedTime() {
|
||||
return function (tree, file) {
|
||||
const filepath = file.history[0];
|
||||
const result = statSync(filepath);
|
||||
file.data.astro.frontmatter.lastModified = result.mtime.toISOString();
|
||||
};
|
||||
}
|
12
remark-reading-time.mjs
Normal file
|
@ -0,0 +1,12 @@
|
|||
import getReadingTime from 'reading-time';
|
||||
import { toString } from 'mdast-util-to-string';
|
||||
|
||||
export function remarkReadingTime() {
|
||||
return function (tree, { data }) {
|
||||
const textOnPage = toString(tree);
|
||||
const readingTime = getReadingTime(textOnPage);
|
||||
// readingTime.text will give us minutes read as a friendly string,
|
||||
// i.e. "3 min read"
|
||||
data.astro.frontmatter.minutesRead = readingTime.text;
|
||||
};
|
||||
}
|
58
src/buttons/buttons.json
Normal file
|
@ -0,0 +1,58 @@
|
|||
[
|
||||
{
|
||||
"name": "CC-BY-NC-SA",
|
||||
"link": "https://creativecommons.org/licenses/by-nc-sa/4.0/",
|
||||
"image": "cc-by-nc-sa.gif"
|
||||
},
|
||||
{
|
||||
"name": "88x31",
|
||||
"link": "https://cyber.dabamos.de/88x31/index.html",
|
||||
"image": "88x31.gif"
|
||||
},
|
||||
{
|
||||
"name": "Anything but Chrome",
|
||||
"image": "anythingbut.gif"
|
||||
},
|
||||
{
|
||||
"name": "Linus Tech Tips",
|
||||
"link": "https://linustechtips.com/",
|
||||
"image": "freetechtips.gif"
|
||||
},
|
||||
{
|
||||
"name": "Made with Neovim",
|
||||
"link": "https://neovim.io/",
|
||||
"image": "neovim.gif"
|
||||
},
|
||||
{
|
||||
"name": "Made with pride [trans flag]",
|
||||
"image": "mw_trans.gif"
|
||||
},
|
||||
{
|
||||
"name": "Trans your gender",
|
||||
"image": "transyourgender.gif",
|
||||
"link": "https://diyhrt.wiki/"
|
||||
},
|
||||
{
|
||||
"name": "ISO 8601",
|
||||
"image": "iso8601.png",
|
||||
"link": "https://xkcd.com/1179/"
|
||||
},
|
||||
{
|
||||
"name": "Runs on a computer",
|
||||
"image": "cloudfree.svg"
|
||||
},
|
||||
{
|
||||
"name": "CSS is difficult",
|
||||
"image": "cssdif.gif"
|
||||
},
|
||||
{
|
||||
"name": "Download Sburb",
|
||||
"image": "e-hs.gif",
|
||||
"link": "https://homestuck.com/"
|
||||
},
|
||||
{
|
||||
"name": "Powered by Rotom",
|
||||
"image": "rotom.gif",
|
||||
"link": "https://bulbapedia.bulbagarden.net/wiki/Rotom_(Pok%C3%A9mon)"
|
||||
}
|
||||
]
|
44
src/components/BaseHead.astro
Normal file
|
@ -0,0 +1,44 @@
|
|||
---
|
||||
// Import the global.css file here so that it is included on
|
||||
// all pages through the use of the <BaseHead /> component.
|
||||
import "../styles/global.css";
|
||||
import "../styles/links/normalize.css";
|
||||
import "../styles/terminal-css/main.css";
|
||||
//import "../styles/terminal-css/base16-lunar-witch.css";
|
||||
const { title, description } = Astro.props;
|
||||
---
|
||||
|
||||
<!-- Global Metadata -->
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<!-- Primary Meta Tags -->
|
||||
<title>{title}</title>
|
||||
<meta name="title" content={title} />
|
||||
<meta name="description" content={description} />
|
||||
<script>
|
||||
import hljs from "highlight.js";
|
||||
hljs.highlightAll();
|
||||
</script>
|
||||
|
||||
<script src="https://unpkg.com/hyperscript.org@0.9.11"></script>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
|
||||
/>
|
||||
|
||||
<!-- Set default theme -->
|
||||
<script is:inline>
|
||||
const theme = (() => {
|
||||
if (localStorage.getItem("theme")?.startsWith("theme_")) {
|
||||
return localStorage.getItem("theme");
|
||||
}
|
||||
if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
|
||||
return "theme_lunar_witch";
|
||||
}
|
||||
return "theme_Bluloco-Zsh-Light";
|
||||
})();
|
||||
window.localStorage.setItem("theme", theme);
|
||||
document.documentElement.classList.add(theme);
|
||||
</script>
|
66
src/components/Card.astro
Normal file
|
@ -0,0 +1,66 @@
|
|||
---
|
||||
export interface Props {
|
||||
title: string;
|
||||
date: Date;
|
||||
author: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
const { url, date, title, author } = Astro.props;
|
||||
---
|
||||
|
||||
<a href={url}>
|
||||
<div class="terminal-card">
|
||||
<header>
|
||||
{title}
|
||||
<span>→</span>
|
||||
</header>
|
||||
<strong style="strong:hover">{author}</strong>
|
||||
<p>
|
||||
{date.toLocaleDateString()}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
<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>
|
181
src/components/Footer.astro
Normal file
|
@ -0,0 +1,181 @@
|
|||
---
|
||||
import buttons from "../buttons/buttons.json";
|
||||
import { Image } from "astro:assets";
|
||||
const today = new Date();
|
||||
let themeObj = await import("../../public/themes.json");
|
||||
let themes = new Map(
|
||||
Object.entries(themeObj).sort((a, b) =>
|
||||
a[0].localeCompare(b[0], "en", { sensitivity: "base" }),
|
||||
),
|
||||
);
|
||||
|
||||
themes.delete("default");
|
||||
---
|
||||
|
||||
<footer style="display: flex;flex-direction: column;">
|
||||
<div class="h-card" style="display:inline;margin:auto;">
|
||||
This work © {today.getFullYear()} by
|
||||
<!-- Author Info -->
|
||||
<a href="https://argentumcation.com/links" rel="author">
|
||||
<span class="p-nickname">ArgentumCation</span>
|
||||
(<span class="p-name">Mira</span>)
|
||||
</a>
|
||||
<!-- Author Metadata -->
|
||||
<div style="display: none">
|
||||
<span class="p-honorific-suffix">Kendo 3-Kyu Emeritus</span>
|
||||
<img
|
||||
style="float:left; margin-right:4px"
|
||||
src="https://argentumcation.com/links/images/mira.jpg"
|
||||
alt="photo of Mira"
|
||||
class="u-photo"
|
||||
/>
|
||||
<a class="u-email" href="mailto:mira@ミラ.コム">mira@ミラ.コム</a>
|
||||
<span class="dt-bday">20XX-04-02</span>
|
||||
<div>
|
||||
<link
|
||||
rel="pgpkey"
|
||||
type="application/pgp-keys"
|
||||
title="ArgentumCation's PGP Key"
|
||||
href="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xdd8583a510deb949714ed847430c50ca90f98bbe"
|
||||
/>
|
||||
<pre
|
||||
class="u-key">
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
xjMEZIjWHxYJKwYBBAHaRw8BAQdAtI4ucxI1PHAJNSIj2TITGcW4BWK2muk3sFfh
|
||||
cyTHvrXNMkFyZ2VudHVtQ2F0aW9uIDxhcmdlbnR1bWNhdGlvbkBhcmdlbnR1bWNh
|
||||
dGlvbi5jb20+wo4EExYKADYFCwkIBwIGFQoJCAsCBRYCAwEAAh4EFiEE3YWDpRDe
|
||||
uUlxTthHQwxQypD5i74FAmSOOF8CGwEACgkQQwxQypD5i74vTwD/Y3T/Jet8zvAK
|
||||
8MhZvEG1H+M/eQFZaAzvSA2FOWmTRo8A+wbyQCbun9Bb5fCZ4/kxHcaGzVgUJSst
|
||||
4j/RMrWUXdIMwo4EExYKADYCGyMWIQTdhYOlEN65SXFO2EdDDFDKkPmLvgUCZI35
|
||||
+gULCQgHAgYVCgkICwIFFgIDAQACHgQACgkQQwxQypD5i747swEA/ugdrs+omBA1
|
||||
2qNqysT9QPqcPnVjSSvYVpVYjNBVvNcBAIDoQJ4T3IEv353iY6oaZfRwoHeFNYWr
|
||||
xJwaGReiIDQFwpMEExYKADsWIQTdhYOlEN65SXFO2EdDDFDKkPmLvgUCZIjWHwIb
|
||||
IwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRBDDFDKkPmLvl3wAQCPR0mt
|
||||
8omFlGLTYi8XJqGu/ha+wGeGrNCh7LixYHfHkwD+Im2LqQkcNXLAJPDK1vGGOh0A
|
||||
D+bSiGT+5Ly40/gkPw7OOARkiNYfEgorBgEEAZdVAQUBAQdAFfcK11UfBm4IPs9w
|
||||
i7YrZ78OxMRm4wf0qdSCQ7vQTDoDAQgHwn4EGBYKACYCGwwWIQTdhYOlEN65SXFO
|
||||
2EdDDFDKkPmLvgUCZI442gUJAeaWOwAKCRBDDFDKkPmLvixuAP9xx1LE2u2qK85v
|
||||
w8tX0Xq0CYMcoJHlCkr5QClBd5v9MwD/anBykPYGnZaMXpqwAEFeY/YkhGWgThkK
|
||||
zzjj1FvXywDCeAQYFgoAIBYhBN2Fg6UQ3rlJcU7YR0MMUMqQ+Yu+BQJkiNYfAhsM
|
||||
AAoJEEMMUMqQ+Yu+mwsBAJV56nL80qeusyuAGrwX+Olgto8tXpmyCVFp825lJRPr
|
||||
AP93N28QeqAnPssteJrWMUN/vrPC8WMebSkvu9jj252dAc4zBGSOOGYWCSsGAQQB
|
||||
2kcPAQEHQOY3LSWsg9XK1rI7r2E+1tmX3Vi7W5opwkvqO6AsduZRwsA1BBgWCgAm
|
||||
FiEE3YWDpRDeuUlxTthHQwxQypD5i74FAmSOOGYCGyIFCQHhM4AAgQkQQwxQypD5
|
||||
i752IAQZFgoAHRYhBJg7grqI4mDBitvwbRVrumZ8pbPPBQJkjjhmAAoJEBVrumZ8
|
||||
pbPPVE8A/0PuUBsaR5QJP7CjiRB0oGmFs4Q/xTLV+PFoUNQNPNlGAQDxJNx844Bs
|
||||
spKDee99cgh6KMzRApNjNAmDBkKezFilBw2HAQDATl1ZehPrkQA1H6ytL0mELqQY
|
||||
lJj4vTGSsBtTxmZ2NgD9HBjGd6OEAjJR7pAmF+720JzDHgtELnFI1E+/5JkNyAw= =staE
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
</pre>
|
||||
</div>
|
||||
<span class="p-gender-identity">Who even knows anymore? (She/They)</span>
|
||||
<span class="u-sound"
|
||||
><!-- Yes I know the spec says sound file but fuck you -->miɹʌ</span
|
||||
>
|
||||
</div>
|
||||
<wbr />
|
||||
is licensed under
|
||||
<!-- License -->
|
||||
<a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" rel="license"
|
||||
>CC BY-NC-SA 4.0</a
|
||||
>
|
||||
</div>
|
||||
<!-- Theme Switcher box -->
|
||||
<div style="margin:auto">
|
||||
Theme:
|
||||
<form style="display:inline-flex;margin:auto">
|
||||
<div class="form-group" style="display:inline-flex;margin-bottom:0">
|
||||
<select
|
||||
style="width:8em"
|
||||
id="theme"
|
||||
title="theme"
|
||||
onchange="switchTheme(this.selectedOptions[0].id);"
|
||||
>
|
||||
{
|
||||
Array.from(themes).map(([themeID, themeName]) => {
|
||||
return <option id={themeID}>{themeName}</option>;
|
||||
})
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<table class="palette">
|
||||
<tr>
|
||||
<td style="background-color:var(--background)"> </td>
|
||||
<td style="background-color:var(--black)"> </td>
|
||||
<td style="background-color:var(--red)"> </td>
|
||||
<td style="background-color:var(--green)"> </td>
|
||||
<td style="background-color:var(--yellow)"> </td>
|
||||
<td style="background-color:var(--blue)"> </td>
|
||||
<td style="background-color:var(--magenta)"> </td>
|
||||
<td style="background-color:var(--cyan)"> </td>
|
||||
<td style="background-color:var(--white)"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="background-color:var(--foreground)"> </td>
|
||||
<td style="background-color:var(--bright-black)"> </td>
|
||||
<td style="background-color:var(--bright-red)"> </td>
|
||||
<td style="background-color:var(--bright-green)"> </td>
|
||||
<td style="background-color:var(--bright-yellow)"> </td>
|
||||
<td style="background-color:var(--bright-blue)"> </td>
|
||||
<td style="background-color:var(--bright-magenta)"> </td>
|
||||
<td style="background-color:var(--bright-cyan)"> </td>
|
||||
<td style="background-color:var(--bright-white)"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
<p style="margin:auto">
|
||||
<a href="https://fediring.net/previous?host=argentumcation.com">←</a>
|
||||
<a href="https://fediring.net/">Fediring</a>
|
||||
<a href="https://fediring.net/next?host=argentumcation.com">→</a>
|
||||
</p>
|
||||
<!-- Theme Switcher Script -->
|
||||
<script is:inline>
|
||||
function switchTheme(theme) {
|
||||
window.localStorage.setItem("theme", theme);
|
||||
let htmlNode = document.getElementsByTagName("html")[0];
|
||||
let currentTheme = Array.from(htmlNode.classList).find((el) =>
|
||||
el.startsWith("theme_"),
|
||||
);
|
||||
console.log(
|
||||
`CurrentTheme: ${currentTheme}, Theme:${JSON.stringify(theme)}`,
|
||||
);
|
||||
htmlNode.classList.replace(currentTheme, theme);
|
||||
document.getElementById(theme).setAttribute("selected", true);
|
||||
}
|
||||
</script>
|
||||
<script is:inline>
|
||||
document.addEventListener("DOMContentLoaded", () =>
|
||||
document.getElementById(theme)?.setAttribute("selected", "true"),
|
||||
);
|
||||
</script>
|
||||
<marquee>
|
||||
{
|
||||
buttons.map((button) => {
|
||||
const image = (
|
||||
<Image
|
||||
class="marquee-button"
|
||||
src={`/buttons/${button.image}`}
|
||||
alt={button.name}
|
||||
width={88}
|
||||
height={31}
|
||||
/>
|
||||
);
|
||||
|
||||
return !button.link?.startsWith("javascript:") ? (
|
||||
<a
|
||||
href={button.link ?? undefined}
|
||||
title={button.name}
|
||||
target="_blank"
|
||||
>
|
||||
{image}
|
||||
</a>
|
||||
) : (
|
||||
<button title={button.name} onclick={button.link}>
|
||||
{image}
|
||||
</button>
|
||||
);
|
||||
})
|
||||
}
|
||||
</marquee>
|
||||
</footer>
|
21
src/components/Header.astro
Normal file
|
@ -0,0 +1,21 @@
|
|||
<div class="terminal-nav">
|
||||
<header class="terminal-logo">
|
||||
<div class="logo terminal-prompt">
|
||||
<a href="/" class="no-style" rel="home">ArgentumCation</a>
|
||||
</div>
|
||||
</header>
|
||||
<nav class="terminal-menu">
|
||||
<ul>
|
||||
<li>
|
||||
<a class="menu-item" href="/links">Links</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="menu-item" href="/posts">Posts</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="menu-item" href="/feed.xml">
|
||||
<i class="fa-solid fa-rss"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
16
src/components/Social.astro
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
export interface Props {
|
||||
className: string;
|
||||
href: string;
|
||||
icon: string;
|
||||
alt: string;
|
||||
text: string;
|
||||
}
|
||||
const { className, href, icon, alt, text } = Astro.props;
|
||||
---
|
||||
|
||||
<a class=`button ${className}` href={href} target="_blank" rel="noopener">
|
||||
<img class="icon" src={icon} alt={alt} />
|
||||
{text}
|
||||
</a>
|
||||
<br />
|
36
src/content/blog/.obsidian/app.json
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"useMarkdownLinks": true,
|
||||
"attachmentFolderPath": "./images",
|
||||
"vimMode": true,
|
||||
"mobileToolbarCommands": [
|
||||
"editor:insert-wikilink",
|
||||
"editor:insert-embed",
|
||||
"editor:insert-tag",
|
||||
"editor:attach-file",
|
||||
"editor:set-heading",
|
||||
"editor:toggle-bold",
|
||||
"editor:toggle-italics",
|
||||
"editor:toggle-strikethrough",
|
||||
"editor:toggle-highlight",
|
||||
"editor:toggle-code",
|
||||
"editor:toggle-blockquote",
|
||||
"editor:insert-link",
|
||||
"editor:toggle-bullet-list",
|
||||
"editor:toggle-numbered-list",
|
||||
"editor:toggle-checklist-status",
|
||||
"editor:indent-list",
|
||||
"editor:unindent-list",
|
||||
"editor:undo",
|
||||
"editor:redo",
|
||||
"editor:configure-toolbar",
|
||||
"editor:insert-callout",
|
||||
"editor:insert-table"
|
||||
],
|
||||
"pdfExportSettings": {
|
||||
"includeName": true,
|
||||
"pageSize": "Letter",
|
||||
"landscape": true,
|
||||
"margin": "0",
|
||||
"downscalePercent": 100
|
||||
}
|
||||
}
|
10
src/content/blog/.obsidian/appearance.json
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"accentColor": "#1a538d",
|
||||
"interfaceFontFamily": "Atkinson Hyperlegible",
|
||||
"textFontFamily": "Atkinson Hyperlegible",
|
||||
"baseFontSize": 16,
|
||||
"baseFontSizeAction": true,
|
||||
"monospaceFontFamily": "Fairfax Hax HD",
|
||||
"cssTheme": "Lunar Witch",
|
||||
"theme": "obsidian"
|
||||
}
|
4
src/content/blog/.obsidian/community-plugins.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
[
|
||||
"obsidian-git",
|
||||
"templater-obsidian"
|
||||
]
|
30
src/content/blog/.obsidian/core-plugins-migration.json
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"properties": true,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": true,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": true,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": false
|
||||
}
|
23
src/content/blog/.obsidian/core-plugins.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
[
|
||||
"file-explorer",
|
||||
"global-search",
|
||||
"switcher",
|
||||
"graph",
|
||||
"backlink",
|
||||
"canvas",
|
||||
"outgoing-link",
|
||||
"tag-pane",
|
||||
"properties",
|
||||
"page-preview",
|
||||
"daily-notes",
|
||||
"templates",
|
||||
"note-composer",
|
||||
"command-palette",
|
||||
"slash-command",
|
||||
"editor-status",
|
||||
"bookmarks",
|
||||
"outline",
|
||||
"word-count",
|
||||
"slides",
|
||||
"file-recovery"
|
||||
]
|
11
src/content/blog/.obsidian/hotkeys.json
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"editor:toggle-source": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Mod"
|
||||
],
|
||||
"key": "/"
|
||||
}
|
||||
],
|
||||
"editor:toggle-comments": []
|
||||
}
|
58
src/content/blog/.obsidian/plugins/obsidian-git/data.json
vendored
Normal file
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"commitMessage": "vault backup: {{date}}",
|
||||
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||
"autoSaveInterval": 0,
|
||||
"autoPushInterval": 10,
|
||||
"autoPullInterval": 10,
|
||||
"autoPullOnBoot": true,
|
||||
"disablePush": false,
|
||||
"pullBeforePush": true,
|
||||
"disablePopups": false,
|
||||
"disablePopupsForNoChanges": true,
|
||||
"listChangedFilesInMessageBody": false,
|
||||
"showStatusBar": true,
|
||||
"updateSubmodules": false,
|
||||
"syncMethod": "rebase",
|
||||
"customMessageOnAutoBackup": false,
|
||||
"autoBackupAfterFileChange": false,
|
||||
"treeStructure": false,
|
||||
"refreshSourceControl": true,
|
||||
"basePath": "",
|
||||
"differentIntervalCommitAndPush": true,
|
||||
"changedFilesInStatusBar": false,
|
||||
"showedMobileNotice": true,
|
||||
"refreshSourceControlTimer": 7000,
|
||||
"showBranchStatusBar": true,
|
||||
"setLastSaveToLastCommit": false,
|
||||
"submoduleRecurseCheckout": false,
|
||||
"gitDir": "",
|
||||
"showFileMenu": true,
|
||||
"authorInHistoryView": "hide",
|
||||
"dateInHistoryView": false,
|
||||
"lineAuthor": {
|
||||
"show": false,
|
||||
"followMovement": "inactive",
|
||||
"authorDisplay": "initials",
|
||||
"showCommitHash": false,
|
||||
"dateTimeFormatOptions": "date",
|
||||
"dateTimeFormatCustomString": "YYYY-MM-DD HH:mm",
|
||||
"dateTimeTimezone": "viewer-local",
|
||||
"coloringMaxAge": "1y",
|
||||
"colorNew": {
|
||||
"r": 255,
|
||||
"g": 150,
|
||||
"b": 150
|
||||
},
|
||||
"colorOld": {
|
||||
"r": 120,
|
||||
"g": 160,
|
||||
"b": 255
|
||||
},
|
||||
"textColorCss": "var(--text-muted)",
|
||||
"ignoreWhitespace": false,
|
||||
"gutterSpacingFallbackLength": 5,
|
||||
"lastShownAuthorDisplay": "initials",
|
||||
"lastShownDateTimeFormatOptions": "date"
|
||||
},
|
||||
"autoCommitMessage": "vault backup: {{date}}"
|
||||
}
|
45283
src/content/blog/.obsidian/plugins/obsidian-git/main.js
vendored
Normal file
9
src/content/blog/.obsidian/plugins/obsidian-git/manifest.json
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"id": "obsidian-git",
|
||||
"name": "Git",
|
||||
"description": "Backup your vault with Git.",
|
||||
"isDesktopOnly": false,
|
||||
"fundingUrl": "https://ko-fi.com/vinzent",
|
||||
"js": "main.js",
|
||||
"version": "2.24.2"
|
||||
}
|
558
src/content/blog/.obsidian/plugins/obsidian-git/styles.css
vendored
Normal file
|
@ -0,0 +1,558 @@
|
|||
@keyframes loading {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-view"] .button-border {
|
||||
border: 2px solid var(--interactive-accent);
|
||||
border-radius: var(--radius-s);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-view"] .view-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="git-history-view"] .view-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.loading > svg {
|
||||
animation: 2s linear infinite loading;
|
||||
transform-origin: 50% 50%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.obsidian-git-center {
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.obsidian-git-textarea {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.obsidian-git-center-button {
|
||||
display: block;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
.tooltip.mod-left {
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
.tooltip.mod-right {
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.git-tools {
|
||||
display: flex;
|
||||
margin-left: auto;
|
||||
}
|
||||
.git-tools .type {
|
||||
padding-left: var(--size-2-1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 11px;
|
||||
}
|
||||
|
||||
.git-tools .type[data-type="M"] {
|
||||
color: orange;
|
||||
}
|
||||
.git-tools .type[data-type="D"] {
|
||||
color: red;
|
||||
}
|
||||
.git-tools .buttons {
|
||||
display: flex;
|
||||
}
|
||||
.git-tools .buttons > * {
|
||||
padding: 0 0;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.git-author {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.git-date {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.git-ref {
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-d-none {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header {
|
||||
background-color: var(--background-primary);
|
||||
border-bottom: 1px solid var(--interactive-accent);
|
||||
font-family: var(--font-monospace);
|
||||
height: 35px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
|
||||
font-size: 14px;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added {
|
||||
border: 1px solid #b4e2b4;
|
||||
border-radius: 5px 0 0 5px;
|
||||
color: #399839;
|
||||
padding: 2px;
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted {
|
||||
border: 1px solid #e9aeae;
|
||||
border-radius: 0 5px 5px 0;
|
||||
color: #c33;
|
||||
margin-left: 1px;
|
||||
padding: 2px;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper {
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
font-size: 15px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name {
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper {
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 3px;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse {
|
||||
-webkit-box-pack: end;
|
||||
-ms-flex-pack: end;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 12px;
|
||||
justify-content: flex-end;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected {
|
||||
background-color: #c8e1ff;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input {
|
||||
margin: 0 4px 0 0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table {
|
||||
border-collapse: collapse;
|
||||
font-family: Menlo, Consolas, monospace;
|
||||
font-size: 13px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff {
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff {
|
||||
display: inline-block;
|
||||
margin-bottom: -8px;
|
||||
margin-right: -4px;
|
||||
overflow-x: scroll;
|
||||
overflow-y: hidden;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line {
|
||||
padding: 0 8em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
|
||||
display: inline-block;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
|
||||
padding: 0 4.5em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn {
|
||||
word-wrap: normal;
|
||||
background: none;
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
-webkit-user-select: text;
|
||||
-moz-user-select: text;
|
||||
-ms-user-select: text;
|
||||
user-select: text;
|
||||
vertical-align: middle;
|
||||
white-space: pre;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
|
||||
.theme-light
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-code-side-line
|
||||
del {
|
||||
background-color: #ffb6ba;
|
||||
}
|
||||
|
||||
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
|
||||
.theme-dark
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-code-side-line
|
||||
del {
|
||||
background-color: #8d232881;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
|
||||
border-radius: 0.2em;
|
||||
display: inline-block;
|
||||
margin-top: -1px;
|
||||
text-decoration: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
|
||||
.theme-light
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-code-side-line
|
||||
ins {
|
||||
background-color: #97f295;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
|
||||
.theme-dark
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-code-side-line
|
||||
ins {
|
||||
background-color: #1d921996;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix {
|
||||
word-wrap: normal;
|
||||
background: none;
|
||||
display: inline;
|
||||
padding: 0;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .line-num1 {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .line-num1,
|
||||
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
padding: 0 0.5em;
|
||||
text-overflow: ellipsis;
|
||||
width: 3.5em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber {
|
||||
background-color: var(--background-primary);
|
||||
border: solid var(--background-modifier-border);
|
||||
border-width: 0 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
width: 7.5em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after {
|
||||
content: "\200b";
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
|
||||
background-color: var(--background-primary);
|
||||
border: solid var(--background-modifier-border);
|
||||
border-width: 0 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
padding: 0 0.5em;
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
text-overflow: ellipsis;
|
||||
width: 4em;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after {
|
||||
content: "\200b";
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
|
||||
background-color: var(--background-primary);
|
||||
border-color: var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del {
|
||||
background-color: #fee8e9;
|
||||
border-color: #e9aeae;
|
||||
}
|
||||
|
||||
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
|
||||
background-color: #dfd;
|
||||
border-color: #b4e2b4;
|
||||
}
|
||||
|
||||
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del {
|
||||
background-color: #521b1d83;
|
||||
border-color: #691d1d73;
|
||||
}
|
||||
|
||||
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
|
||||
background-color: rgba(30, 71, 30, 0.5);
|
||||
border-color: #13501381;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-info {
|
||||
background-color: var(--background-primary);
|
||||
border-color: var(--background-modifier-border);
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.theme-light
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-diff
|
||||
.d2h-del.d2h-change {
|
||||
background-color: #fdf2d0;
|
||||
}
|
||||
|
||||
.theme-dark
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-diff
|
||||
.d2h-del.d2h-change {
|
||||
background-color: #55492480;
|
||||
}
|
||||
|
||||
.theme-light
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-diff
|
||||
.d2h-ins.d2h-change {
|
||||
background-color: #ded;
|
||||
}
|
||||
|
||||
.theme-dark
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-diff
|
||||
.d2h-ins.d2h-change {
|
||||
background-color: rgba(37, 78, 37, 0.418);
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a {
|
||||
color: #3572b0;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"]
|
||||
.d2h-file-list-wrapper
|
||||
a:visited {
|
||||
color: #3572b0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list {
|
||||
display: block;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li {
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
margin: 0;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch {
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-icon {
|
||||
fill: currentColor;
|
||||
margin-right: 10px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted {
|
||||
color: #c33;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-added {
|
||||
color: #399839;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-changed {
|
||||
color: #d0b44c;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-moved {
|
||||
color: #3572b0;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-tag {
|
||||
background-color: var(--background-primary);
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
font-size: 10px;
|
||||
margin-left: 5px;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag {
|
||||
border: 2px solid #c33;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag {
|
||||
border: 1px solid #399839;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag {
|
||||
border: 1px solid #d0b44c;
|
||||
}
|
||||
|
||||
.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag {
|
||||
border: 1px solid #3572b0;
|
||||
}
|
||||
|
||||
/* ====================== Line Authoring Information ====================== */
|
||||
|
||||
.cm-gutterElement.obs-git-blame-gutter {
|
||||
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
|
||||
border-width: 0px 2px 0.2px 2px;
|
||||
border-style: solid;
|
||||
border-color: var(--background-secondary);
|
||||
background-color: var(--background-secondary);
|
||||
}
|
||||
|
||||
.cm-gutterElement.obs-git-blame-gutter > div,
|
||||
.line-author-settings-preview {
|
||||
/* delegate text color to settings */
|
||||
color: var(--obs-git-gutter-text);
|
||||
font-family: monospace;
|
||||
height: 100%; /* ensure, that age-based background color occupies entire parent */
|
||||
text-align: right;
|
||||
padding: 0px 6px 0px 6px;
|
||||
white-space: pre; /* Keep spaces and do not collapse them. */
|
||||
}
|
||||
|
||||
@media(max-width:800px){
|
||||
/* hide git blame gutter not to superpose text */
|
||||
.cm-gutterElement.obs-git-blame-gutter {
|
||||
display: none;
|
||||
}
|
||||
}
|
70
src/content/blog/.obsidian/plugins/obsidian-livesync/data.json
vendored
Normal file
|
@ -0,0 +1,70 @@
|
|||
{
|
||||
"couchDB_URI": "",
|
||||
"couchDB_USER": "",
|
||||
"couchDB_PASSWORD": "",
|
||||
"couchDB_DBNAME": "",
|
||||
"liveSync": true,
|
||||
"syncOnSave": false,
|
||||
"syncOnStart": false,
|
||||
"savingDelay": 200,
|
||||
"lessInformationInLog": false,
|
||||
"gcDelay": 0,
|
||||
"versionUpFlash": "",
|
||||
"minimumChunkSize": 20,
|
||||
"longLineThreshold": 250,
|
||||
"showVerboseLog": false,
|
||||
"suspendFileWatching": false,
|
||||
"trashInsteadDelete": true,
|
||||
"periodicReplication": false,
|
||||
"periodicReplicationInterval": 60,
|
||||
"syncOnFileOpen": false,
|
||||
"encrypt": false,
|
||||
"passphrase": "",
|
||||
"doNotDeleteFolder": false,
|
||||
"resolveConflictsByNewerFile": false,
|
||||
"batchSave": false,
|
||||
"deviceAndVaultName": "",
|
||||
"usePluginSettings": false,
|
||||
"showOwnPlugins": false,
|
||||
"showStatusOnEditor": false,
|
||||
"usePluginSync": false,
|
||||
"autoSweepPlugins": false,
|
||||
"autoSweepPluginsPeriodic": false,
|
||||
"notifyPluginOrSettingUpdated": false,
|
||||
"checkIntegrityOnSave": false,
|
||||
"batch_size": 50,
|
||||
"batches_limit": 40,
|
||||
"useHistory": true,
|
||||
"disableRequestURI": true,
|
||||
"skipOlderFilesOnSync": true,
|
||||
"checkConflictOnlyOnOpen": false,
|
||||
"syncInternalFiles": false,
|
||||
"syncInternalFilesBeforeReplication": false,
|
||||
"syncInternalFilesIgnorePatterns": "\\/node_modules\\/, \\/\\.git\\/, \\/obsidian-livesync\\/",
|
||||
"syncInternalFilesInterval": 60,
|
||||
"additionalSuffixOfDatabaseName": "",
|
||||
"ignoreVersionCheck": false,
|
||||
"lastReadUpdates": 0,
|
||||
"deleteMetadataOfDeletedFiles": false,
|
||||
"syncIgnoreRegEx": "",
|
||||
"syncOnlyRegEx": "",
|
||||
"customChunkSize": 100,
|
||||
"readChunksOnline": true,
|
||||
"watchInternalFileChanges": true,
|
||||
"automaticallyDeleteMetadataOfDeletedFiles": 0,
|
||||
"disableMarkdownAutoMerge": false,
|
||||
"writeDocumentsIfConflicted": false,
|
||||
"useDynamicIterationCount": false,
|
||||
"syncAfterMerge": false,
|
||||
"configPassphraseStore": "",
|
||||
"encryptedPassphrase": "",
|
||||
"encryptedCouchDBConnection": "[\"WxsQs2gfmXFZCqA8MYSo/ZGeKOHSq6hYKM77yVJdih4mKrTXFIRZVtrGbF7q80eivURsqjAoSzWCWdL8nrEOzSZoWULLtYGb5t/JpQqfP6o+ubYimw63IGCQPxpOLlyGLYm/RITk0sLXDTMCIkKUzeiMB0kQ6bnmQyfnRsD105xIZVnGjbgdVtQTFk0b/PTs0R6FgcG2DSjSbKGgyZw=\",\"49337be5455b0d06216a912b20000000\",\"7aa93e29c36d6c9ce6a9126b1dbb8ee5\"]",
|
||||
"permitEmptyPassphrase": false,
|
||||
"useIndexedDBAdapter": false,
|
||||
"useTimeouts": false,
|
||||
"writeLogToTheFile": false,
|
||||
"hashCacheMaxCount": 300,
|
||||
"hashCacheMaxAmount": 50,
|
||||
"concurrencyOfReadChunksOnline": 100,
|
||||
"minimumIntervalOfReadChunksOnline": 333
|
||||
}
|
24242
src/content/blog/.obsidian/plugins/obsidian-livesync/main.js
vendored
Normal file
10
src/content/blog/.obsidian/plugins/obsidian-livesync/manifest.json
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"id": "obsidian-livesync",
|
||||
"name": "Self-hosted LiveSync",
|
||||
"version": "0.17.34",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
|
||||
"author": "vorotamoroz",
|
||||
"authorUrl": "https://github.com/vrtmrz",
|
||||
"isDesktopOnly": false
|
||||
}
|
254
src/content/blog/.obsidian/plugins/obsidian-livesync/styles.css
vendored
Normal file
|
@ -0,0 +1,254 @@
|
|||
.added {
|
||||
color: var(--text-on-accent);
|
||||
background-color: var(--text-accent);
|
||||
}
|
||||
|
||||
.normal {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.deleted {
|
||||
color: var(--text-on-accent);
|
||||
background-color: var(--text-muted);
|
||||
}
|
||||
|
||||
.op-scrollable {
|
||||
overflow-y: scroll;
|
||||
/* min-height: 280px; */
|
||||
max-height: 280px;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
.op-pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.op-warn {
|
||||
border: 1px solid salmon;
|
||||
padding: 2px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.op-warn::before {
|
||||
content: "Warning";
|
||||
font-weight: bold;
|
||||
color: salmon;
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.op-warn-info {
|
||||
border: 1px solid rgb(255, 209, 81);
|
||||
padding: 2px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.op-warn-info::before {
|
||||
content: "Notice";
|
||||
font-weight: bold;
|
||||
color: rgb(255, 209, 81);
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.syncstatusbar {
|
||||
-webkit-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
.tcenter {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sls-plugins-wrap {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
max-height: 50vh;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.sls-plugins-tbl {
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
width: 100%;
|
||||
max-height: 80%;
|
||||
}
|
||||
|
||||
.divider th {
|
||||
border-top: 1px solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
/* .sls-table-head{
|
||||
width:50%;
|
||||
}
|
||||
.sls-table-tail{
|
||||
width:50%;
|
||||
|
||||
} */
|
||||
|
||||
|
||||
.sls-header-button {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
.sls-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:root {
|
||||
--slsmessage: "";
|
||||
}
|
||||
|
||||
.CodeMirror-wrap::before,
|
||||
.cm-s-obsidian>.cm-editor::before,
|
||||
.canvas-wrapper::before {
|
||||
content: attr(data-log);
|
||||
text-align: right;
|
||||
white-space: pre-wrap;
|
||||
position: absolute;
|
||||
border-radius: 4px;
|
||||
/* border:1px solid --background-modifier-border; */
|
||||
display: inline-block;
|
||||
top: 8px;
|
||||
color: --text-normal;
|
||||
opacity: 0.5;
|
||||
font-size: 80%;
|
||||
-webkit-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
.canvas-wrapper::before {
|
||||
right: 48px;
|
||||
}
|
||||
|
||||
.CodeMirror-wrap::before {
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
.cm-s-obsidian>.cm-editor::before {
|
||||
right: 16px;
|
||||
}
|
||||
|
||||
.sls-setting-tab {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.sls-setting-menu-btn {
|
||||
color: var(--text-normal);
|
||||
background-color: var(--background-secondary-alt);
|
||||
border-radius: 4px 4px 0 0;
|
||||
padding: 6px 10px;
|
||||
cursor: pointer;
|
||||
margin-right: 12px;
|
||||
font-family: "Inter", sans-serif;
|
||||
outline: none;
|
||||
user-select: none;
|
||||
flex-grow: 1;
|
||||
text-align: center;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
|
||||
.sls-setting-label.selected {
|
||||
/* order: 1; */
|
||||
flex-grow: 1;
|
||||
/* width: 100%; */
|
||||
}
|
||||
|
||||
.sls-setting-tab:hover~div.sls-setting-menu-btn,
|
||||
.sls-setting-label.selected .sls-setting-tab:checked~div.sls-setting-menu-btn {
|
||||
background-color: var(--interactive-accent);
|
||||
color: var(--text-on-accent);
|
||||
}
|
||||
|
||||
.sls-setting-menu {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
/* flex-wrap: wrap; */
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.sls-setting-label {
|
||||
flex-grow: 1;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.setting-collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sls-plugins-tbl-buttons {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.sls-plugins-tbl-buttons button {
|
||||
flex-grow: 0;
|
||||
padding: 6px 10px;
|
||||
}
|
||||
|
||||
.sls-plugins-tbl-device-head {
|
||||
background-color: var(--background-secondary-alt);
|
||||
color: var(--text-accent);
|
||||
}
|
||||
|
||||
.op-flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.op-flex input {
|
||||
display: inline-flex;
|
||||
flex-grow: 1;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.op-info {
|
||||
display: inline-flex;
|
||||
flex-grow: 1;
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
width: 100%;
|
||||
margin-bottom: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.history-added {
|
||||
color: var(--text-on-accent);
|
||||
background-color: var(--text-accent);
|
||||
}
|
||||
|
||||
.history-normal {
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.history-deleted {
|
||||
color: var(--text-on-accent);
|
||||
background-color: var(--text-muted);
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
.ob-btn-config-fix label {
|
||||
margin-right: 40px;
|
||||
}
|
||||
|
||||
.ob-btn-config-info {
|
||||
border: 1px solid salmon;
|
||||
padding: 2px;
|
||||
margin: 1px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.ob-btn-config-head {
|
||||
padding: 2px;
|
||||
margin: 1px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.isWizard .wizardHidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sls-setting:not(.isWizard) .wizardOnly {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sls-item-dirty::before {
|
||||
content: "✏";
|
||||
}
|
61
src/content/blog/.obsidian/plugins/obsidian-markdown-file-suffix/main.js
vendored
Normal file
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
*/
|
||||
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __getProtoOf = Object.getPrototypeOf;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __reflectGet = Reflect.get;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
||||
var __async = (__this, __arguments, generator) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
var fulfilled = (value) => {
|
||||
try {
|
||||
step(generator.next(value));
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
var rejected = (value) => {
|
||||
try {
|
||||
step(generator.throw(value));
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||||
step((generator = generator.apply(__this, __arguments)).next());
|
||||
});
|
||||
};
|
||||
|
||||
// main.ts
|
||||
var main_exports = {};
|
||||
__export(main_exports, {
|
||||
default: () => MarkdownSuffixPlugin
|
||||
});
|
||||
module.exports = __toCommonJS(main_exports);
|
||||
var import_obsidian = require("obsidian");
|
||||
var MarkdownSuffixPlugin = class extends import_obsidian.Plugin {
|
||||
onload() {
|
||||
return __async(this, null, function* () {
|
||||
__superGet(MarkdownSuffixPlugin.prototype, this, "onload").call(this);
|
||||
this.registerExtensions(["mdx", "svx"], "markdown");
|
||||
});
|
||||
}
|
||||
};
|
10
src/content/blog/.obsidian/plugins/obsidian-markdown-file-suffix/manifest.json
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"id": "obsidian-markdown-file-suffix",
|
||||
"name": "Addional Markdown suffix (.mdx/.svx).",
|
||||
"version": "1.0.0",
|
||||
"minAppVersion": "0.10.12",
|
||||
"description": "Use additional files like .mdx / .svx as if they were markdown.",
|
||||
"author": "swissmation",
|
||||
"authorUrl": "https://github.com/swissmation",
|
||||
"isDesktopOnly": false
|
||||
}
|
8
src/content/blog/.obsidian/plugins/obsidian-markdown-file-suffix/styles.css
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
|
||||
This CSS file will be included with your plugin, and
|
||||
available in the app when your plugin is enabled.
|
||||
|
||||
If your plugin does not need CSS, delete this file.
|
||||
|
||||
*/
|
30
src/content/blog/.obsidian/plugins/templater-obsidian/data.json
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"command_timeout": 5,
|
||||
"templates_folder": "_templates",
|
||||
"templates_pairs": [
|
||||
[
|
||||
"",
|
||||
""
|
||||
]
|
||||
],
|
||||
"trigger_on_file_creation": true,
|
||||
"auto_jump_to_cursor": false,
|
||||
"enable_system_commands": false,
|
||||
"shell_path": "",
|
||||
"user_scripts_folder": "",
|
||||
"enable_folder_templates": true,
|
||||
"folder_templates": [
|
||||
{
|
||||
"folder": "",
|
||||
"template": ""
|
||||
}
|
||||
],
|
||||
"syntax_highlighting": true,
|
||||
"syntax_highlighting_mobile": true,
|
||||
"enabled_templates_hotkeys": [
|
||||
""
|
||||
],
|
||||
"startup_templates": [
|
||||
""
|
||||
]
|
||||
}
|
5624
src/content/blog/.obsidian/plugins/templater-obsidian/main.js
vendored
Normal file
11
src/content/blog/.obsidian/plugins/templater-obsidian/manifest.json
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"id": "templater-obsidian",
|
||||
"name": "Templater",
|
||||
"version": "2.4.1",
|
||||
"description": "Create and use templates",
|
||||
"minAppVersion": "1.5.0",
|
||||
"author": "SilentVoid",
|
||||
"authorUrl": "https://github.com/SilentVoid13",
|
||||
"helpUrl": "https://silentvoid13.github.io/Templater/",
|
||||
"isDesktopOnly": false
|
||||
}
|
220
src/content/blog/.obsidian/plugins/templater-obsidian/styles.css
vendored
Normal file
|
@ -0,0 +1,220 @@
|
|||
.templater_search {
|
||||
width: calc(100% - 20px);
|
||||
}
|
||||
|
||||
.templater_div {
|
||||
border-top: 1px solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.templater_div > .setting-item {
|
||||
border-top: none !important;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.templater_div > .setting-item > .setting-item-control {
|
||||
justify-content: space-around;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.templater_div
|
||||
> .setting-item
|
||||
> .setting-item-control
|
||||
> .setting-editor-extra-setting-button {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.templater_donating {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.templater_title {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.templater_template {
|
||||
align-self: center;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
.templater_cmd {
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.templater_div2 > .setting-item {
|
||||
align-content: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.templater-prompt-div {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.templater-prompt-form {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.templater-prompt-input {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.templater-button-div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
textarea.templater-prompt-input {
|
||||
height: 10rem;
|
||||
}
|
||||
|
||||
textarea.templater-prompt-input:focus {
|
||||
border-color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .templater-command-bg {
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
background-color: var(--background-primary-alt);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command {
|
||||
font-size: 0.85em;
|
||||
font-family: var(--font-monospace);
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .templater-inline .cm-templater-command {
|
||||
background-color: var(--background-primary-alt);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-opening-tag {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-closing-tag {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag {
|
||||
color: var(--code-property, #008bff);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-execution-tag {
|
||||
color: var(--code-function, #c0d700);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-keyword {
|
||||
color: var(--code-keyword, #00a7aa);
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-atom {
|
||||
color: var(--code-normal, #f39b35);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-value,
|
||||
.cm-s-obsidian .cm-templater-command.cm-number,
|
||||
.cm-s-obsidian .cm-templater-command.cm-type {
|
||||
color: var(--code-value, #a06fca);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-def,
|
||||
.cm-s-obsidian .cm-templater-command.cm-type.cm-def {
|
||||
color: var(--code-normal, var(--text-normal));
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-property,
|
||||
.cm-s-obsidian .cm-templater-command.cm-property.cm-def,
|
||||
.cm-s-obsidian .cm-templater-command.cm-attribute {
|
||||
color: var(--code-function, #98e342);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable,
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable-2,
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable-3,
|
||||
.cm-s-obsidian .cm-templater-command.cm-meta {
|
||||
color: var(--code-property, #d4d4d4);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-callee,
|
||||
.cm-s-obsidian .cm-templater-command.cm-operator,
|
||||
.cm-s-obsidian .cm-templater-command.cm-qualifier,
|
||||
.cm-s-obsidian .cm-templater-command.cm-builtin {
|
||||
color: var(--code-operator, #fc4384);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-tag {
|
||||
color: var(--code-tag, #fc4384);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment,
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment.cm-tag,
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute {
|
||||
color: var(--code-comment, #696d70);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-string,
|
||||
.cm-s-obsidian .cm-templater-command.cm-string-2 {
|
||||
color: var(--code-string, #e6db74);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-header,
|
||||
.cm-s-obsidian .cm-templater-command.cm-hr {
|
||||
color: var(--code-keyword, #da7dae);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-link {
|
||||
color: var(--code-normal, #696d70);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-error {
|
||||
border-bottom: 1px solid #c42412;
|
||||
}
|
||||
|
||||
.CodeMirror-hints {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
|
||||
margin: 0;
|
||||
padding: 2px;
|
||||
|
||||
-webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
border-radius: 3px;
|
||||
border: 1px solid silver;
|
||||
|
||||
background: white;
|
||||
font-size: 90%;
|
||||
font-family: monospace;
|
||||
|
||||
max-height: 20em;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.CodeMirror-hint {
|
||||
margin: 0;
|
||||
padding: 0 4px;
|
||||
border-radius: 2px;
|
||||
white-space: pre;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
li.CodeMirror-hint-active {
|
||||
background: #08f;
|
||||
color: white;
|
||||
}
|
3
src/content/blog/.obsidian/templates.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"folder": "_templates"
|
||||
}
|
1
src/content/blog/.obsidian/themes/Lunar Witch
vendored
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit be9db886ee504a5b261304a072efed8dd95477d9
|
189
src/content/blog/.obsidian/workspace-mobile.json
vendored
Normal file
|
@ -0,0 +1,189 @@
|
|||
{
|
||||
"main": {
|
||||
"id": "7663cfdec50a2e60",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "88b63dcf6741e6f9",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "4e7fb0fa8a91a644",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "empty",
|
||||
"state": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "9906b890c36b6299",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "disorganized-notes.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "d09a5378edd6a804",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Cluster(fuck).md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 2
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "f4b976b97e7fd228",
|
||||
"type": "mobile-drawer",
|
||||
"children": [
|
||||
{
|
||||
"id": "9a9092e5af389cad",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "2d68e3a0b9422237",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "5f7d922fec445f5f",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "d6ada5d7cc6d1556",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "all-properties",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "4a8876ca2b9a89ff",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {}
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 0
|
||||
},
|
||||
"right": {
|
||||
"id": "218c19081cc9759e",
|
||||
"type": "mobile-drawer",
|
||||
"children": [
|
||||
{
|
||||
"id": "960abadb2f6d83be",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "Cluster(fuck).md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1269aab005c7711",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "Cluster(fuck).md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "e52f324db672aadb",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "Cluster(fuck).md"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 0
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"templater-obsidian:Templater": false,
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false
|
||||
}
|
||||
},
|
||||
"active": "d09a5378edd6a804",
|
||||
"lastOpenFiles": [
|
||||
"images/image-7.png",
|
||||
"disorganized-notes.md",
|
||||
"Cluster(fuck).md",
|
||||
"gpg.md",
|
||||
"_drafts/hypercomplex-interest.md",
|
||||
"_drafts/olc-codes.md",
|
||||
"hypercomplex-interest.md",
|
||||
"_drafts/numbers.md",
|
||||
"traefik-setup.mdx",
|
||||
"traefik-setup.md",
|
||||
"self-hosting.md",
|
||||
"post-1.md",
|
||||
"olc-codes.md",
|
||||
"modern-unix.md",
|
||||
"numbers.md",
|
||||
"btrfs.md",
|
||||
"Numbers.md",
|
||||
"post-1.mdx"
|
||||
]
|
||||
}
|
195
src/content/blog/.obsidian/workspace.json
vendored
Normal file
|
@ -0,0 +1,195 @@
|
|||
{
|
||||
"main": {
|
||||
"id": "ab75e1a8295cbca5",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "a4abf8e6b36b57d5",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "a519de38d2e49486",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Cluster(fuck).md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "bded18fe7fea77f1",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "2aae19a12ff084d4",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "e720579404769582",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "6ebf02f3e8539b39",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "8ebfcda9ac2bec1f",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 200
|
||||
},
|
||||
"right": {
|
||||
"id": "8305c95260129b96",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "2fe64cfa3b21eac0",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "96089a301fb95140",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "Cluster(fuck).md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "07b1190b9f080756",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "Cluster(fuck).md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "7039859502237cad",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "a83852de6ab674f8",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "Cluster(fuck).md"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "b1ea4546b2c351a8",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "all-properties",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"templater-obsidian:Templater": false
|
||||
}
|
||||
},
|
||||
"active": "a519de38d2e49486",
|
||||
"lastOpenFiles": [
|
||||
"traefik-setup.md",
|
||||
"images/minecraft-srv-01.png",
|
||||
"_drafts/olc-codes.md",
|
||||
"_drafts/numbers.md",
|
||||
"images/btrfs.md",
|
||||
"_drafts/eigencode.md",
|
||||
"_drafts/hypercomplex-interest.md",
|
||||
"_drafts/luka_pona.md",
|
||||
"_drafts/modern-unix.md",
|
||||
"_drafts/monogatari.md",
|
||||
"_drafts/nonfree.md",
|
||||
"_drafts/self-hosting.md",
|
||||
"_drafts/Wolfgrads bot.md",
|
||||
"disorganized-notes.md",
|
||||
"Cluster(fuck).md",
|
||||
"gpg.md",
|
||||
"modern-unix.md",
|
||||
"post-1.md",
|
||||
"self-hosting.md",
|
||||
"_templates/post-template.md",
|
||||
"test post.md",
|
||||
"_templates",
|
||||
"btrfs.sync-conflict-20240624-164405-EI6QHE3.md",
|
||||
"btrfs.sync-conflict-20240624-164402-EI6QHE3.md",
|
||||
"post-1.mdx",
|
||||
"traefik-setup.mdx",
|
||||
"drafts/self-hosting.md",
|
||||
"drafts/modern-unix.md",
|
||||
"drafts/Wolfgrads bot.md",
|
||||
"drafts"
|
||||
]
|
||||
}
|