Compare commits
154 Commits
Implement/
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0100e6551e | ||
|
|
0c892827c1 | ||
|
|
4089f17801 | ||
|
|
76861d894a | ||
|
|
d2be99348d | ||
|
|
36d61330d7 | ||
|
|
ae9f3abc6f | ||
|
|
e4e91f1b04 | ||
|
|
b3a130c96f | ||
|
|
8e2004efbc | ||
|
|
2aba3a2a3f | ||
|
|
cbb03a223c | ||
|
|
0943bc6122 | ||
|
|
92b9821f18 | ||
|
|
9b90659f33 | ||
|
|
4358bd903e | ||
|
|
73fad69e04 | ||
|
|
c67ecbec8c | ||
|
|
4911c9360c | ||
|
|
6f851a2f39 | ||
|
|
2788f466b6 | ||
|
|
fb0463a528 | ||
|
|
aa9fc20b8b | ||
|
|
a44c07e616 | ||
|
|
35dca53357 | ||
|
|
b5d2059c9a | ||
|
|
7ebe8cf8f4 | ||
|
|
065d4a9b64 | ||
|
|
326c9ce5cb | ||
|
|
82345758f7 | ||
|
|
f465383805 | ||
|
|
3dd9f772a4 | ||
|
|
9b4db63f07 | ||
|
|
2e13ba7452 | ||
|
|
324c050054 | ||
|
|
0646b07d07 | ||
|
|
30c59d8d7f | ||
|
|
c005b239c0 | ||
|
|
1e814c5b05 | ||
|
|
e27455a7a1 | ||
|
|
ca505bdeec | ||
|
|
7f3ed2c5cc | ||
|
|
c3795875e1 | ||
|
|
f5c04d7c7b | ||
|
|
82022ad5f8 | ||
|
|
4825adbd63 | ||
|
|
6ef38a4ac2 | ||
|
|
05349050cb | ||
|
|
d05c9eca42 | ||
|
|
0f8df5a65f | ||
|
|
069319dec5 | ||
|
|
4e1a367590 | ||
|
|
a57afe85ff | ||
|
|
7e75e1b90d | ||
|
|
b761de7722 | ||
|
|
71c5dfb02c | ||
|
|
f25eebf009 | ||
|
|
a9816f99d5 | ||
|
|
17fa945473 | ||
|
|
350fcfd000 | ||
|
|
f59faedf1d | ||
|
|
648a79b8c2 | ||
|
|
8e5c51b1ad | ||
|
|
388ae5df25 | ||
|
|
15b648f401 | ||
|
|
99a4db465a | ||
|
|
d39c1c98e5 | ||
|
|
d3398ce58f | ||
|
|
d77d670f43 | ||
|
|
d1a71cfc4d | ||
|
|
a53902c85b | ||
|
|
45997708a4 | ||
|
|
1e19d49893 | ||
|
|
d97b68aac3 | ||
|
|
4b8ed6a3a2 | ||
|
|
b7e5a80b21 | ||
|
|
efb8542906 | ||
|
|
7d0da672ce | ||
|
|
ddc406201c | ||
|
|
fd0fb8dde8 | ||
|
|
4a1170a966 | ||
|
|
ddfd775929 | ||
|
|
afba79e028 | ||
|
|
d154d58627 | ||
|
|
202e5b4684 | ||
|
|
917fd245ab | ||
|
|
2c180bbb16 | ||
|
|
ebb8e01256 | ||
|
|
59ed0776a5 | ||
|
|
956216018b | ||
|
|
d888c602de | ||
|
|
cd0df78764 | ||
|
|
b4d1e790c1 | ||
|
|
560f5c489d | ||
|
|
9dfb033aa0 | ||
|
|
c8b2091418 | ||
|
|
53a41356cb | ||
|
|
1b187b6abf | ||
|
|
5fef83e952 | ||
|
|
69f016a8c9 | ||
|
|
f68afc4898 | ||
|
|
80efbfdcce | ||
|
|
cffa7bec11 | ||
|
|
08f38d5879 | ||
|
|
038d64265a | ||
|
|
a6afc346a9 | ||
|
|
217002df77 | ||
|
|
6fd0781fca | ||
|
|
ae7eef1fcb | ||
|
|
4b0c493006 | ||
|
|
c304012b23 | ||
|
|
d1c228a5ee | ||
|
|
c635ef6e01 | ||
|
|
6b6f154b3b | ||
|
|
ae24ae7a06 | ||
|
|
a5b053039b | ||
|
|
cdefc536f2 | ||
|
|
864efed094 | ||
|
|
04d7908a6b | ||
|
|
d71af343f9 | ||
|
|
38db7f0c51 | ||
|
|
ea8efa6bf4 | ||
|
|
d2ed317428 | ||
|
|
dbbd513b0d | ||
|
|
5ee162e73d | ||
|
|
277f0c9aa9 | ||
|
|
a7dd93c544 | ||
|
|
9eaba2560a | ||
|
|
0bb80bccad | ||
|
|
048cdeeec3 | ||
|
|
8a43b5cdf6 | ||
|
|
9fce87ccd9 | ||
|
|
1f5efa313a | ||
|
|
4b01764cbe | ||
|
|
40f0b317a6 | ||
|
|
7184f2aa8e | ||
|
|
c7571a512b | ||
|
|
6fad3014ac | ||
|
|
0f77588aa2 | ||
|
|
51d2c75ec5 | ||
|
|
33e266ad07 | ||
|
|
fd9d462e68 | ||
|
|
769831a64c | ||
|
|
1359ddaeec | ||
|
|
7efd5a94fe | ||
|
|
405c5ee6a3 | ||
|
|
4caa7e7952 | ||
|
|
9b2e61d942 | ||
|
|
9678fa3e53 | ||
|
|
08c54f8336 | ||
|
|
f96348e598 | ||
|
|
14baf1e1ec | ||
|
|
1a9f464b1e | ||
|
|
ebacc1371c |
17
.github/stale.yml
vendored
Normal file
17
.github/stale.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 60
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- pinned
|
||||
- security
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: wontfix
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
||||
22
.github/workflows/publish.yaml
vendored
Normal file
22
.github/workflows/publish.yaml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: Publish container
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_HUB_TOKEN }}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: Publish container to Docker Hub
|
||||
run: docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 --tag "${{ secrets.DOCKER_HUB_USERNAME }}/standardnotes-extensions:$(git log -1 --format="%H" | cut -c -6)" --tag ${{ secrets.DOCKER_HUB_USERNAME }}/standardnotes-extensions:latest --push .
|
||||
8
Dockerfile
Normal file
8
Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM python:3-alpine
|
||||
|
||||
WORKDIR /build
|
||||
COPY requirements.txt build_repo.py ./
|
||||
|
||||
RUN pip3 install --no-cache-dir -r requirements.txt
|
||||
|
||||
ENTRYPOINT ["python3", "build_repo.py"]
|
||||
94
README.md
94
README.md
@@ -1,26 +1,35 @@
|
||||
<img alt="LaMetric-System-Monitor" src="https://standardnotes.org/assets/icon.png"/>
|
||||

|
||||
|
||||
## Standard Notes Extensions - Self-Hosted Repository
|
||||
Host Standard Notes extensions on your own server. This utility parses most of the open-source extensions available from original repository as well as from other authors and builds an extensions repository which then can be plugged directly into Standard Notes Web/Desktop Clients. (https://standardnotes.org/)
|
||||
Host Standard Notes extensions on your own server. This utility parses most of the open-source extensions available from the Standard Notes team as well as a range of extensions created by the wider Standard Notes community to build an extensions repository which can then be plugged directly into Standard Notes Web/Desktop Clients. (https://standardnotes.org/)
|
||||
|
||||
Extensions are listed as YAML in the `\extensions` sub-directory, pull a request if you'd like to add yours.
|
||||
Extensions are listed as `YAML` in the `/extensions` sub-directory, pull a request if you'd like to add yours.
|
||||
|
||||
### Requirements
|
||||
* Python 3
|
||||
* pyyaml module
|
||||
* requests module
|
||||
|
||||
### Demo
|
||||
<p align="center">
|
||||
<img alt="Standard Notes Extension Repository Demo" src="https://github.com/iganeshk/standardnotes-extensions/raw/assets/standardnotes_demo.gif" width="80%" />
|
||||
</p>
|
||||
|
||||
### Usage
|
||||
|
||||
* Fork this repository to the web-server:
|
||||
|
||||
* Clone this repository to your web-server:
|
||||
```bash
|
||||
$ git clone https://github.com/iganeshk/standardnotes-extensions.git
|
||||
$ cd standardnotes-extensions
|
||||
$ pip3 install -r requirements.txt
|
||||
```
|
||||
* Visit the following link to generate a personal access token:
|
||||
```
|
||||
$ https://github.com/settings/tokens
|
||||
```
|
||||

|
||||
|
||||
* Use the env.sample to create a .env file for your environment variables. The utility will automatically load these when it starts.
|
||||
* Use the provided [`env.sample`](../env.sample) to create a `.env` file for your environment variables and including your Github personal access token.
|
||||
|
||||
```
|
||||
# Sample ENV setup Variables (YAML)
|
||||
@@ -42,18 +51,70 @@ github:
|
||||
|
||||
```
|
||||
|
||||
* [Optional] Make additions or appropriate changes in `/extensions` directory.
|
||||
* [Optional] Add more extensions to the `/extensions` directory, using the `YAML` sample templates for [extensions](../extension.yaml.sample) or [themes](../theme.yaml.sample), or modify any existing extensions.
|
||||
* Run the utility:
|
||||
|
||||
```bash
|
||||
$ python3 build-repo.py
|
||||
$ python3 build_repo.py
|
||||
```
|
||||
* Serve the `/public` directory and verify if the endpoint is reachable.
|
||||
* Serve the `/public` directory and verify that the endpoint is reachable.
|
||||
|
||||
```
|
||||
https://your-domain.com/extensions/index.json
|
||||
```
|
||||
* Import the above endpoint into the web/desktop client. (Note: Enable CORS for your web server respectively, nginx setup provided below)
|
||||
* Import the `latest url` for each extension you want to add (for example: `https://your-domaim.com/extensions/bold-editor/index.json`) into the Standard Notes Web Desktop client under the `General` > `Advanced Settings` > `Install Custom Extension` menu. (Note: Enable CORS for your web server respectively, nginx setup provided below)
|
||||
|
||||
### Docker
|
||||
|
||||
* To run via Docker, clone this repository, create your `.env` file using the provided `env.sample`, and optionally add any additional extensions to the `/extensions` directory, following the instructions above.
|
||||
* Then pull and run the container, specifying the mount points for the `.env` file, the `extensions` directory, and the `public` directory, where the self-hosted extensions will be placed:
|
||||
|
||||
```bash
|
||||
$ docker run \
|
||||
-v $PWD/.env:/build/.env \
|
||||
-v $PWD/extensions:/build/extensions \
|
||||
-v $PWD/public:/build/public \
|
||||
-v $PWD/standardnotes-extensions-list.txt:/build/standardnotes-extensions-list.txt \
|
||||
iganesh/standardnotes-extensions
|
||||
```
|
||||
|
||||
#### Docker Compose
|
||||
|
||||
If you would like to use the container with docker-compose, the exact setup will be somewhat specific to your configuration, however the following snippet may be helpful, assuming you have cloned this repository in your `$HOME` directory and followed the instructions regarding the `.env` file and `/extensions` directory:
|
||||
|
||||
```yaml
|
||||
version: '3.3'
|
||||
services:
|
||||
nginx:
|
||||
...
|
||||
volumes:
|
||||
- standardnotes-extensions:/usr/share/nginx/html
|
||||
|
||||
standardnotes-extensions:
|
||||
image: iganesh/standardnotes-extensions
|
||||
restart: "no"
|
||||
volumes:
|
||||
- $HOME/standardnotes-extensions/.env:/build/.env
|
||||
- $HOME/standardnotes-extensions/extensions:/build/extensions
|
||||
- $HOME/standardnotes-extensions/standardnotes-extensions-list.txt:/build/standardnotes-extensions-list.txt
|
||||
- standardnotes-extensions:/build/public
|
||||
|
||||
volumes:
|
||||
standardnotes-extensions:
|
||||
name: standardnotes-extensions
|
||||
```
|
||||
|
||||
This snippet will handle the building of the extension creation-container, and place the result in the `standardnotes-extensions` volume, which can then be mounted in the nginx container so that it can be served as demonstrated in the instructions below. Note that it's necessary to include the `restart: "no"` flag, because the container is designed to stop after it has finished generating the extensions.
|
||||
|
||||
Also, please note that the configuration snippet above is in no way a complete setup: you will still have to configure the nginx container and set up the syncing server containers.
|
||||
|
||||
### Docker Build
|
||||
|
||||
If you need to build the container, clone this repository, `cd` into it, and run the following command:
|
||||
|
||||
```bash
|
||||
$ docker build --no-cache -t standardnotes-extensions:local .
|
||||
```
|
||||
|
||||
### Setup with nginx
|
||||
|
||||
@@ -68,7 +129,7 @@ https://your-domain.com/extensions/index.json
|
||||
#
|
||||
# Custom headers and headers various browsers *should* be OK with but aren't
|
||||
#
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,X-Application-Version,X-SNJS-Version';
|
||||
#
|
||||
# Tell client that this pre-flight info is valid for 20 days
|
||||
#
|
||||
@@ -80,20 +141,19 @@ https://your-domain.com/extensions/index.json
|
||||
if ($request_method = 'POST') {
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,X-Application-Version,X-SNJS-Version';
|
||||
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
|
||||
}
|
||||
if ($request_method = 'GET') {
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,X-Application-Version,X-SNJS-Version';
|
||||
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Acknowledgments
|
||||
* This project was adapted from https://github.com/JokerQyou/snextensions to facilitate on-the-fly updating of extensions.
|
||||
* Dracula Theme by https://github.com/cameronldn
|
||||
|
||||
### ToDo
|
||||
* This project was adapted originally from https://github.com/JokerQyou/snextensions
|
||||
* Check out https://github.com/jonhadfield/awesome-standard-notes for more Standard Notes stuff!
|
||||
* Authors of custom themes and extensions
|
||||
|
||||
297
build_repo.py
297
build_repo.py
@@ -17,30 +17,47 @@ import os
|
||||
import json
|
||||
import shutil
|
||||
from zipfile import ZipFile
|
||||
from socket import gethostname as getlocalhostname
|
||||
import requests
|
||||
import yaml
|
||||
|
||||
LOCAL_HOSTNAME = getlocalhostname()
|
||||
|
||||
def get_environment(base_dir):
|
||||
"""
|
||||
Parse the environment variables from .env
|
||||
"""
|
||||
temp_envvar = yaml.load("""
|
||||
domain: https://domain.com/extensions
|
||||
temp_env_var = yaml.load("""
|
||||
github:
|
||||
username:
|
||||
token:
|
||||
public_dir: public
|
||||
extensions_dir: extensions
|
||||
domain: https://domain.com/extensions
|
||||
stdnotes_extensions_list: standardnotes-extensions-list.txt
|
||||
""", Loader=yaml.FullLoader)
|
||||
env_var = {}
|
||||
if os.path.isfile(os.path.join(base_dir, ".env")):
|
||||
with open(os.path.join(base_dir, ".env")) as temp_env_file:
|
||||
temp_envvar = yaml.load(temp_env_file, Loader=yaml.FullLoader)
|
||||
env_var = yaml.load(temp_env_file, Loader=yaml.FullLoader)
|
||||
|
||||
# if user hasn't updated the env, copy defaults to yaml dictionary
|
||||
for key in temp_env_var:
|
||||
try:
|
||||
if not env_var[key]:
|
||||
env_var[key] = temp_env_var[key]
|
||||
except KeyError as e:
|
||||
env_var[key] = temp_env_var[key]
|
||||
|
||||
return env_var
|
||||
|
||||
return temp_envvar
|
||||
|
||||
def process_zipball(repo_dir, release_version):
|
||||
"""
|
||||
Grab the release zipball and extract it without the root/parent/top directory
|
||||
"""
|
||||
with ZipFile(os.path.join(repo_dir, release_version) + ".zip", 'r') as zipball:
|
||||
with ZipFile(os.path.join(repo_dir, release_version) + ".zip",
|
||||
'r') as zipball:
|
||||
for member in zipball.namelist():
|
||||
# Parse files list excluding the top/parent/root directory
|
||||
filename = '/'.join(member.split('/')[1:])
|
||||
@@ -50,103 +67,131 @@ def process_zipball(repo_dir, release_version):
|
||||
if filename.startswith('.'): continue
|
||||
source = zipball.open(member)
|
||||
try:
|
||||
target = open(os.path.join(repo_dir, release_version, filename), "wb")
|
||||
target = open(
|
||||
os.path.join(repo_dir, release_version, filename), "wb")
|
||||
with source, target:
|
||||
target = open(os.path.join(repo_dir, release_version, filename), "wb")
|
||||
target = open(
|
||||
os.path.join(repo_dir, release_version, filename),
|
||||
"wb")
|
||||
shutil.copyfileobj(source, target)
|
||||
except FileNotFoundError:
|
||||
except (FileNotFoundError, IsADirectoryError):
|
||||
# Create the directory
|
||||
os.makedirs(os.path.dirname(os.path.join(repo_dir, release_version, filename)))
|
||||
os.makedirs(
|
||||
os.path.dirname(
|
||||
os.path.join(repo_dir, release_version, filename)))
|
||||
continue
|
||||
# Delete the archive zip
|
||||
os.remove(os.path.join(repo_dir, release_version) + ".zip")
|
||||
|
||||
|
||||
def git_clone_method(ext_yaml, public_dir, ext_has_update):
|
||||
def git_clone_method(ext_yaml, public_path, ext_has_update):
|
||||
"""
|
||||
Get the latest repository and parse for metadata
|
||||
"""
|
||||
repo_name = ext_yaml['github'].split('/')[-1]
|
||||
repo_dir = os.path.join(public_dir, repo_name)
|
||||
run([
|
||||
'git', 'clone', 'https://github.com/{github}.git'.format(**ext_yaml),
|
||||
'--quiet', '{}_tmp'.format(repo_name)
|
||||
],
|
||||
check=True)
|
||||
ext_last_commit = (run([
|
||||
'git', '--git-dir=' +
|
||||
os.path.join(public_dir, '{}_tmp'.format(repo_name), '.git'),
|
||||
'rev-list', '--tags', '--max-count=1'], stdout=PIPE, check=True).stdout.decode('utf-8').replace("\n", ""))
|
||||
ext_version = run([
|
||||
'git', '--git-dir',
|
||||
os.path.join(public_dir, '{}_tmp'.format(repo_name), '.git'),
|
||||
'describe', '--tags', ext_last_commit], stdout=PIPE, check=True).stdout.decode('utf-8').replace("\n", "")
|
||||
repo_dir = os.path.join(public_path, repo_name)
|
||||
try:
|
||||
run([
|
||||
'git', 'clone', 'https://github.com/{github}.git'.format(**ext_yaml),
|
||||
'--quiet', '{}_tmp'.format(repo_name)
|
||||
],
|
||||
check=True)
|
||||
ext_last_commit = (run([
|
||||
'git', '--git-dir=' +
|
||||
os.path.join(public_path, '{}_tmp'.format(repo_name), '.git'),
|
||||
'rev-list', '--tags', '--max-count=1'
|
||||
],
|
||||
stdout=PIPE,
|
||||
check=True).stdout.decode('utf-8').replace(
|
||||
"\n", ""))
|
||||
ext_version = run([
|
||||
'git', '--git-dir',
|
||||
os.path.join(public_path, '{}_tmp'.format(repo_name), '.git'),
|
||||
'describe', '--tags', ext_last_commit
|
||||
],
|
||||
stdout=PIPE,
|
||||
check=True).stdout.decode('utf-8').replace("\n", "")
|
||||
|
||||
# check if the latest version already exist
|
||||
if not os.path.exists(
|
||||
os.path.join(repo_dir, ext_version)):
|
||||
ext_has_update = True
|
||||
shutil.move(
|
||||
os.path.join(public_dir, '{}_tmp'.format(repo_name)),
|
||||
os.path.join(public_dir, repo_name,
|
||||
'{}'.format(ext_version)))
|
||||
# Delete .git resource from the directory
|
||||
shutil.rmtree(
|
||||
os.path.join(public_dir, repo_name,
|
||||
'{}'.format(ext_version), '.git'))
|
||||
else:
|
||||
# ext already up-to-date
|
||||
# print('Extension: {} - {} (already up-to-date)'.format(ext_yaml['name'], ext_version))
|
||||
# clean-up
|
||||
shutil.rmtree(os.path.join(public_dir, '{}_tmp'.format(repo_name)))
|
||||
return ext_version, ext_has_update
|
||||
# check if the latest version already exist
|
||||
if not os.path.exists(os.path.join(repo_dir, ext_version)):
|
||||
ext_has_update = True
|
||||
shutil.move(
|
||||
os.path.join(public_path, '{}_tmp'.format(repo_name)),
|
||||
os.path.join(public_path, repo_name, '{}'.format(ext_version)))
|
||||
# Delete .git resource from the directory
|
||||
shutil.rmtree(
|
||||
os.path.join(public_path, repo_name, '{}'.format(ext_version),
|
||||
'.git'))
|
||||
else:
|
||||
# ext already up-to-date
|
||||
# print('Extension: {} - {} (already up-to-date)'.format(ext_yaml['name'], ext_version))
|
||||
# clean-up
|
||||
shutil.rmtree(os.path.join(public_path, '{}_tmp'.format(repo_name)))
|
||||
return ext_version, ext_has_update
|
||||
except Exception as e:
|
||||
print('Skipping: {:38s}\t(github repository not found)'.format(repo_name))
|
||||
return '0.0', False
|
||||
|
||||
|
||||
def parse_extensions(base_dir, base_url, ghub_session):
|
||||
def parse_extensions(base_dir, extensions_dir, public_dir, base_url, stdnotes_ext_list_path, ghub_headers):
|
||||
"""
|
||||
Build Standard Notes extensions repository using Github meta-data
|
||||
"""
|
||||
|
||||
extension_dir = os.path.join(base_dir, 'extensions')
|
||||
public_dir = os.path.join(base_dir, 'public')
|
||||
if not os.path.exists(os.path.join(public_dir)):
|
||||
os.makedirs(public_dir)
|
||||
os.chdir(public_dir)
|
||||
extension_path = extensions_dir
|
||||
public_path = public_dir
|
||||
os.chdir(public_path)
|
||||
|
||||
extensions = []
|
||||
# Read and parse all extension info
|
||||
for extfiles in os.listdir(extension_dir):
|
||||
if not extfiles.endswith('.yaml'):
|
||||
continue
|
||||
std_ext_list = []
|
||||
std_ext_list = parse_stdnotes_extensions(stdnotes_ext_list_path)
|
||||
# Get all extensions, sort extensions alphabetically along by their by type
|
||||
extfiles = [x for x in sorted(os.listdir(extension_path)) if not x.endswith('theme.yaml') and x.endswith('.yaml')]
|
||||
themefiles = [y for y in sorted(os.listdir(extension_path)) if y.endswith('theme.yaml')]
|
||||
extfiles.extend(themefiles)
|
||||
|
||||
with open(os.path.join(extension_dir, extfiles)) as extyaml:
|
||||
for extfile in extfiles:
|
||||
with open(os.path.join(extension_path, extfile)) as extyaml:
|
||||
ext_yaml = yaml.load(extyaml, Loader=yaml.FullLoader)
|
||||
|
||||
ext_has_update = False
|
||||
repo_name = ext_yaml['github'].split('/')[-1]
|
||||
repo_dir = os.path.join(public_dir, repo_name)
|
||||
|
||||
# If we don't have a Github API Sesssion, using cloning repos instead
|
||||
if ghub_session is not None:
|
||||
# Github API Method
|
||||
# Get extension Github meta-data
|
||||
ext_git_info = json.loads(ghub_session.get('https://api.github.com/repos/{github}/releases/latest'.format(**ext_yaml)).text)
|
||||
ext_version = ext_git_info['tag_name']
|
||||
# Check if extension directory alredy exists
|
||||
repo_dir = os.path.join(public_path, repo_name)
|
||||
# If we have valid github personal access token
|
||||
if ghub_headers:
|
||||
# Get extension's github release meta-data
|
||||
ext_git_info = json.loads(
|
||||
requests.get(
|
||||
'https://api.github.com/repos/{github}/releases/latest'.
|
||||
format(**ext_yaml), headers=ghub_headers).text)
|
||||
try:
|
||||
ext_version = ext_git_info['tag_name']
|
||||
except KeyError:
|
||||
# No github releases found
|
||||
print('Skipping: {:38s}\t(github repository not found)'.format(
|
||||
ext_yaml['name']))
|
||||
continue
|
||||
# Check if extension directory already exists
|
||||
if not os.path.exists(repo_dir):
|
||||
os.makedirs(repo_dir)
|
||||
# Check if extension with current release alredy exists
|
||||
# Check if extension with current release already exists
|
||||
if not os.path.exists(os.path.join(repo_dir, ext_version)):
|
||||
ext_has_update = True
|
||||
os.makedirs(os.path.join(repo_dir, ext_version))
|
||||
# Grab the release and then unpack it
|
||||
with requests.get(ext_git_info['zipball_url'], stream=True) as zipball_stream:
|
||||
with open(os.path.join(repo_dir, ext_version) + ".zip", 'wb') as zipball_file:
|
||||
with requests.get(ext_git_info['zipball_url'], headers=ghub_headers,
|
||||
stream=True) as zipball_stream:
|
||||
with open(
|
||||
os.path.join(repo_dir, ext_version) + ".zip",
|
||||
'wb') as zipball_file:
|
||||
shutil.copyfileobj(zipball_stream.raw, zipball_file)
|
||||
# unpack the zipball
|
||||
process_zipball(repo_dir, ext_version)
|
||||
else:
|
||||
ext_version, ext_has_update = git_clone_method(ext_yaml, public_dir, ext_has_update)
|
||||
ext_version, ext_has_update = git_clone_method(
|
||||
ext_yaml, public_path, ext_has_update)
|
||||
|
||||
if extfile in std_ext_list:
|
||||
ext_id = ext_yaml['id'].rsplit('.', 1)[1]
|
||||
ext_yaml['id'] = '%s.%s' % (LOCAL_HOSTNAME, ext_id)
|
||||
|
||||
# Build extension info (stateless)
|
||||
# https://domain.com/sub-domain/my-extension/index.json
|
||||
@@ -161,8 +206,8 @@ def parse_extensions(base_dir, base_url, ghub_session):
|
||||
thumbnail_url=ext_yaml.get('thumbnail_url', None),
|
||||
valid_until='2030-05-16T18:35:33.000Z',
|
||||
url='/'.join([base_url, repo_name, ext_version, ext_yaml['main']]),
|
||||
download_url='https://github.com/{}/archive/{}.zip'.
|
||||
format(ext_yaml['github'], ext_version),
|
||||
download_url='https://github.com/{}/archive/{}.zip'.format(
|
||||
ext_yaml['github'], ext_version),
|
||||
latest_url='/'.join([base_url, repo_name, 'index.json']),
|
||||
flags=ext_yaml.get('flags', []),
|
||||
dock_icon=ext_yaml.get('dock_icon', {}),
|
||||
@@ -173,22 +218,33 @@ def parse_extensions(base_dir, base_url, ghub_session):
|
||||
# Strip empty values
|
||||
extension = {k: v for k, v in extension.items() if v}
|
||||
|
||||
# Check if extension is already up-to-date ()
|
||||
# Check if extension is already up-to-date
|
||||
if ext_has_update:
|
||||
# Generate JSON file for each extension
|
||||
with open(os.path.join(public_dir, repo_name, 'index.json'),
|
||||
with open(os.path.join(public_path, repo_name, 'index.json'),
|
||||
'w') as ext_json:
|
||||
json.dump(extension, ext_json, indent=4)
|
||||
print('Extension: {:30s} {:6s}\t(updated)'.format(ext_yaml['name'], ext_version))
|
||||
if extfile.endswith("theme.yaml"):
|
||||
print('Theme: {:34s} {:6s}\t(updated)'.format(
|
||||
ext_yaml['name'], ext_version.strip('v')))
|
||||
else:
|
||||
print('Extension: {:30s} {:6s}\t(updated)'.format(
|
||||
ext_yaml['name'], ext_version.strip('v')))
|
||||
else:
|
||||
# ext already up-to-date
|
||||
print('Extension: {:30s} {:6s}\t(already up-to-date)'.format(ext_yaml['name'], ext_version))
|
||||
if extfile.endswith("theme.yaml"):
|
||||
print('Theme: {:34s} {:6s}\t(already up-to-date)'.format(
|
||||
ext_yaml['name'], ext_version.strip('v')))
|
||||
else:
|
||||
print('Extension: {:30s} {:6s}\t(already up-to-date)'.format(
|
||||
ext_yaml['name'], ext_version.strip('v')))
|
||||
|
||||
extensions.append(extension)
|
||||
os.chdir('..')
|
||||
|
||||
# Generate the main repository index JSON
|
||||
with open(os.path.join(public_dir, 'index.json'), 'w') as ext_json:
|
||||
# https://domain.com/sub-domain/my-index.json
|
||||
with open(os.path.join(public_path, 'index.json'), 'w') as ext_json:
|
||||
json.dump(
|
||||
dict(
|
||||
content_type='SN|Repo',
|
||||
@@ -198,6 +254,28 @@ def parse_extensions(base_dir, base_url, ghub_session):
|
||||
ext_json,
|
||||
indent=4,
|
||||
)
|
||||
print("\nProcessed: {:20s}{} extensions. (Components: {}, Themes: {})".format("", len(extfiles), len(extfiles)-len(themefiles), len(themefiles)))
|
||||
print("Repository Endpoint URL: {:6s}{}/index.json".format("", base_url))
|
||||
|
||||
def parse_stdnotes_extensions(stdnotes_ext_list_path):
|
||||
"""
|
||||
To circumvent around the issue: https://github.com/standardnotes/desktop/issues/789
|
||||
We'll be parsing standard note's extensions package ids with local hostname followed
|
||||
by package name
|
||||
"""
|
||||
if not os.path.exists(stdnotes_ext_list_path):
|
||||
print("\n⚠️ WARNING: Unable to locate standard notes extensions list file, make sure you've \
|
||||
cloned the source repository properly\
|
||||
")
|
||||
print("You may encounter issues registering extensions, checkout ")
|
||||
print("https://github.com/standardnotes/desktop/issues/789 for more details\n")
|
||||
else:
|
||||
std_exts_list = []
|
||||
with open(stdnotes_ext_list_path) as list_file:
|
||||
for line in list_file:
|
||||
if not line.startswith('#'):
|
||||
std_exts_list.append(line.rstrip())
|
||||
return std_exts_list
|
||||
|
||||
|
||||
def main():
|
||||
@@ -206,33 +284,54 @@ def main():
|
||||
"""
|
||||
base_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
# Get environment variables
|
||||
env_var = {}
|
||||
env_var = get_environment(base_dir)
|
||||
base_url = env_var['domain']
|
||||
while base_url.endswith('/'):
|
||||
base_url = base_url[:-1]
|
||||
|
||||
if (env_var['github']['username'] and env_var['github']['token']):
|
||||
# Get a re-usable session object using user credentials
|
||||
ghub_session = requests.Session()
|
||||
ghub_session.auth = (env_var['github']['username'], env_var['github']['token'])
|
||||
try:
|
||||
ghub_verify = ghub_session.get("https://api.github.com/")
|
||||
if not ghub_verify.headers['status'] == "200 OK":
|
||||
print("Error: %s " % ghub_verify.headers['status'])
|
||||
print("Bad Github credentials in the .env file, check and try again.")
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print("Unknown error occured: %s" % e)
|
||||
# Build extensions
|
||||
parse_extensions(base_dir, base_url, ghub_session)
|
||||
# Terminate Session
|
||||
ghub_session.close()
|
||||
base_url = env_var["domain"]
|
||||
extensions_dir = env_var['extensions_dir']
|
||||
if os.path.exists(os.path.join(base_dir, extensions_dir)):
|
||||
extensions_dir = os.path.join(base_dir, extensions_dir)
|
||||
else:
|
||||
print("\n⚠️ WARNING: Unable to locate extensions directory, make sure you've \
|
||||
cloned the source repository properly and try again")
|
||||
sys.exit(1)
|
||||
public_dir = env_var['public_dir']
|
||||
if os.path.exists(os.path.join(base_dir, public_dir)):
|
||||
public_dir = os.path.join(base_dir, public_dir)
|
||||
else:
|
||||
os.makedirs(os.path.join(base_dir, public_dir))
|
||||
public_dir = os.path.join(base_dir, public_dir)
|
||||
|
||||
stdnotes_ext_list = env_var['stdnotes_extensions_list']
|
||||
stdnotes_ext_list_path = os.path.join(base_dir, stdnotes_ext_list)
|
||||
ghub_auth_complete = False
|
||||
ghub_headers = False
|
||||
|
||||
if env_var['github']['token']:
|
||||
# Get a re-usable session object using user credentials
|
||||
ghub_headers = {'Authorization': f'token %s' % env_var['github']['token']}
|
||||
try:
|
||||
ghub_verify = requests.get("https://api.github.com/", headers=ghub_headers)
|
||||
if not ghub_verify.status_code == 200:
|
||||
print("ERROR: %s " % ghub_verify.headers['status'])
|
||||
print(
|
||||
"Bad Github credentials in the .env file, check and try again."
|
||||
)
|
||||
sys.exit(1)
|
||||
ghub_auth_complete = True
|
||||
except Exception as e:
|
||||
print("ERROR: %s" % e)
|
||||
|
||||
if not ghub_auth_complete:
|
||||
# Environment file missing
|
||||
print("Environment not set (read env.sample)")
|
||||
input("⚠️ This method is set to be deprecated soon, Press any key to continue:\n")
|
||||
parse_extensions(base_dir, base_url, None)
|
||||
sys.exit(0)
|
||||
print(
|
||||
"Environment variables not set (have a look at env.sample). Using git-clone method instead"
|
||||
)
|
||||
input(
|
||||
"⚠️ WARNING: This is an in-efficient process\nPress any key to go ahead anyway: ")
|
||||
|
||||
# Build extensions
|
||||
parse_extensions(base_dir, extensions_dir, public_dir, base_url, stdnotes_ext_list_path, ghub_headers)
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
19
env.sample
19
env.sample
@@ -3,14 +3,23 @@
|
||||
#
|
||||
# $ cp env.sample .env
|
||||
#
|
||||
# WARNING
|
||||
# Do not include this new file in source control
|
||||
# Github Credentials
|
||||
# Generate your token here: https://github.com/settings/tokens
|
||||
# Generate your personal access token here: https://github.com/settings/tokens
|
||||
# No additional permission required, this is just to avoid github api rate limits
|
||||
#
|
||||
|
||||
domain: https://domain.com/extensions
|
||||
|
||||
github:
|
||||
username: USERNAME
|
||||
token: TOKEN
|
||||
|
||||
# EXTENSION PUBLICATION DOMAIN
|
||||
domain: https://domain.com/extensions
|
||||
|
||||
# EXTENSIONS DIRECTORY
|
||||
extensions_dir: extensions
|
||||
|
||||
# EXTENSIONS PUBLICATION DIRECTORY
|
||||
public_dir: public
|
||||
|
||||
# STANDARD HOSTS EXTENSIONS LIST
|
||||
stdnotes_extensions_list: standardnotes-extensions-list.txt
|
||||
|
||||
14
extension.yaml.sample
Normal file
14
extension.yaml.sample
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
id: <tld.domain.organization.extension-name>
|
||||
github: <organization/repository>
|
||||
main: <index.html>
|
||||
|
||||
name: <Extension_Name>
|
||||
content_type: SN|Component
|
||||
area: editor-stack
|
||||
version: <0.0.1>
|
||||
marketing_url: <https://github.com/organization/extension>
|
||||
thumbnail_url: < https://raw.githubusercontent.com/organization/extension/master/thumbnail.png>
|
||||
description: <Description of extension>
|
||||
flags: []
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.action-bar
|
||||
npm: sn-action-bar
|
||||
github: sn-extensions/action-bar
|
||||
github: standardnotes/action-bar
|
||||
main: index.html
|
||||
|
||||
name: Action Bar
|
||||
name: ActionBar
|
||||
content_type: SN|Component
|
||||
area: editor-stack
|
||||
version: 1.3.0
|
||||
version: 1.3.2
|
||||
marketing_url: https://standardnotes.org/extensions/action-bar
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/components/action-bar.jpg
|
||||
description: Useful utility bar with information about the current note as well as actions like duplicate, copy, and save.
|
||||
|
||||
14
extensions/append-editor.yaml
Normal file
14
extensions/append-editor.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
id: com.append-editor.beta
|
||||
github: TheodoreChu/append-editor
|
||||
main: public/index.html
|
||||
|
||||
name: Append Editor - Beta
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.2.6
|
||||
marketing_url: https://appendeditor.com
|
||||
thumbnail_url:
|
||||
description: Append to your notes.
|
||||
flags: []
|
||||
...
|
||||
@@ -1,16 +1,17 @@
|
||||
---
|
||||
id: org.standardnotes.theme-autobiography
|
||||
npm: sn-theme-autobiography
|
||||
github: sn-extensions/autobiography-theme
|
||||
github: standardnotes/autobiography-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Autobiography
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.0
|
||||
version: 1.0.1
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/themes/autobiography.jpg
|
||||
description: A theme for writers and readers.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#9D7441'
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.autocomplete-tags
|
||||
npm: sn-folders-component
|
||||
github: sn-extensions/autocomplete-tags
|
||||
github: standardnotes/quick-tags
|
||||
main: index.html
|
||||
|
||||
name: Quick Tags
|
||||
content_type: SN|Component
|
||||
area: note-tags
|
||||
version: 1.3.1
|
||||
version: 1.3.2
|
||||
description: Work more efficiently by quickly selecting from a live list of tags while you type. Supports keyboard shortcuts and folders.
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/components/autocomplete.jpg
|
||||
...
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.bold-editor
|
||||
npm: sn-bold-editor
|
||||
github: sn-extensions/bold-editor
|
||||
github: standardnotes/bold-editor
|
||||
main: dist/index.html
|
||||
|
||||
name: Bold Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.0.5
|
||||
version: 1.2.1
|
||||
marketing_url:
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/bold.jpg
|
||||
description: A simple and peaceful rich editor that helps you write and think clearly. Features FileSafe integration, so you can embed your encrypted images, videos, and audio recordings directly inline.
|
||||
|
||||
20
extensions/callisto-theme.yaml
Normal file
20
extensions/callisto-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.Lissy93.sn-callisto-theme
|
||||
github: Lissy93/callisto-theme-standard-notes
|
||||
main: dist/dist.css
|
||||
|
||||
name: Callisto
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.3
|
||||
marketing_url: https://github.com/Lissy93/callisto-theme-standard-notes
|
||||
thumbnail_url: https://raw.githubusercontent.com/Lissy93/callisto-theme-standard-notes/master/screenshot1.png
|
||||
description: Dusty background with teal accents.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#0b1021'
|
||||
foreground_color: '#d6085a'
|
||||
border_color: '#1EE3B5'
|
||||
...
|
||||
14
extensions/code-editor-fold.yaml
Normal file
14
extensions/code-editor-fold.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
id: org.matt-anderson.code-editor-fold
|
||||
github: matta9001/code-editor-fold
|
||||
main: index.html
|
||||
|
||||
name: Code Editor Fold
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.0.0
|
||||
marketing_url: https://github.com/matta9001/code-editor-fold
|
||||
thumbnail_url: https://raw.githubusercontent.com/matta9001/code-editor-fold/main/code_editor_preview.png
|
||||
description: A fork of the official code editor which includes header and code folding.
|
||||
flags: []
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.code-editor
|
||||
npm: sn-code-editor
|
||||
github: sn-extensions/code-editor
|
||||
github: standardnotes/code-editor
|
||||
main: index.html
|
||||
|
||||
name: Code Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.3
|
||||
version: 1.3.8
|
||||
marketing_url: https://standardnotes.org/extensions/code-editor
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/code.jpg
|
||||
description: Syntax highlighting and convenient keyboard shortcuts for over 120 programming languages. Ideal for code snippets and procedures.
|
||||
|
||||
20
extensions/dark-hybrid-theme.yaml
Normal file
20
extensions/dark-hybrid-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.xthursdayx.dark-hybrid-theme-sn
|
||||
github: xthursdayx/dark-hybrid-theme-sn
|
||||
main: dist/dist.css
|
||||
|
||||
name: Dark Hybrid
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: v1.2
|
||||
marketing_url: https://github.com/xthursdayx/dark-hybrid-theme-sn
|
||||
thumbnail_url: https://raw.githubusercontent.com/xthursdayx/dark-hybrid-theme-sn/master/preview.png
|
||||
description: Dark Hybrid Theme Extension for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#726a7b'
|
||||
foreground_color: '#ffffff'
|
||||
border_color: '#726a7b'
|
||||
...
|
||||
@@ -1,19 +1,20 @@
|
||||
---
|
||||
id: dev.cldn.sn-theme-dracula
|
||||
github: cameronldn/sn-theme-dracula
|
||||
id: ml.xnor.sn-theme-dracula
|
||||
github: dracula/standard-notes
|
||||
main: dist/dist.css
|
||||
|
||||
name: Dracula
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2.1
|
||||
marketing_url: https://github.com/cameronldn/sn-theme-dracula
|
||||
thumbnail_url: https://raw.githubusercontent.com/cameronldn/sn-theme-dracula/master/preview.png
|
||||
version: 0.0.17
|
||||
marketing_url: https://github.com/dracula/standard-notes
|
||||
thumbnail_url: https://raw.githubusercontent.com/dracula/standard-notes/master/screenshot.png
|
||||
description: A Dracula inspired theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#8be9fd'
|
||||
foreground_color: '#8be9fd'
|
||||
border_color: '#8be9fd'
|
||||
background_color: '#bd93f9'
|
||||
foreground_color: '#bd93f9'
|
||||
border_color: '#bd93f9'
|
||||
...
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: org.standardnotes.theme-dynamic
|
||||
npm: sn-theme-dynamic
|
||||
github: sn-extensions/dynamic-theme
|
||||
github: standardnotes/dynamic-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Dynamic
|
||||
|
||||
20
extensions/evernote-dark-theme.yaml
Normal file
20
extensions/evernote-dark-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.xthursdayx.sn-theme-evernote-dark
|
||||
github: xthursdayx/sn-theme-evernote-dark
|
||||
main: dist/dist.css
|
||||
|
||||
name: Evernote-style Dark Theme
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2.6
|
||||
marketing_url: https://github.com/xthursdayx/sn-theme-evernote-dark
|
||||
thumbnail_url: https://raw.githubusercontent.com/xthursdayx/sn-theme-evernote-dark/master/preview.png
|
||||
description: Evernote inspired dark theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#00a82e'
|
||||
foreground_color: '#0081c2'
|
||||
border_color: '#00a82e'
|
||||
...
|
||||
14
extensions/fast-editor.yaml
Normal file
14
extensions/fast-editor.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
id: dev.dec0dOS.fast_editor
|
||||
github: dec0dOS/standard-notes-fast-editor
|
||||
main: index.html
|
||||
|
||||
name: Fast Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 4.0.2
|
||||
marketing_url: https://github.com/dec0dOS/standard-notes-fast-editor
|
||||
thumbnail_url:
|
||||
description: A mobile-friendly and high-performance editor that makes it easy to write and read nested notes.
|
||||
flags: []
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.theme-focus
|
||||
npm: sn-theme-focus
|
||||
github: sn-extensions/focus-theme
|
||||
github: standardnotes/focus-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Focus
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2.3
|
||||
version: 1.2.5
|
||||
marketing_url: https://standardnotes.org/extensions/focused
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/themes/focus-with-mobile.jpg
|
||||
description: For when you need to go in.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.folders-component
|
||||
npm: sn-folders-component
|
||||
github: sn-extensions/folders-component
|
||||
npm: sn-folders
|
||||
github: standardnotes/folders-component
|
||||
main: index.html
|
||||
|
||||
name: Folders Component
|
||||
content_type: SN|Component
|
||||
area: tags-list
|
||||
version: 1.3.3
|
||||
version: 1.3.8
|
||||
description: Create nested folders from your tags with easy drag and drop. Folders also supports Smart Tags, which allow you to build custom filters for viewing your notes.
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/components/folders.jpg
|
||||
...
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
---
|
||||
id: org.standardnotes.theme-futura
|
||||
npm: sn-futura-theme
|
||||
github: sn-extensions/futura-theme
|
||||
github: standardnotes/futura-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Futura
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2.2
|
||||
version: 1.2.4
|
||||
marketing_url: https://standardnotes.org/extensions/futura
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/themes/futura-with-mobile.jpg
|
||||
description: Calm and relaxed. Take some time off.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#fca429'
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.github-push
|
||||
npm: sn-github-push
|
||||
github: sn-extensions/github-push
|
||||
github: standardnotes/github-push
|
||||
main: index.html
|
||||
|
||||
name: GitHub Push
|
||||
content_type: SN|Component
|
||||
area: editor-stack
|
||||
version: 1.2.1
|
||||
version: 1.2.4
|
||||
marketing_url: https://standardnotes.org/extensions/github-push
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/components/github-push.jpg
|
||||
description: Push note changes to a public or private GitHub repository, with options for file extension and commit message.
|
||||
|
||||
19
extensions/grey-scale-theme.yaml
Normal file
19
extensions/grey-scale-theme.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
id: io.github.hkp2k.sn-theme-grey-scale
|
||||
github: hkp2k/sn-theme-grey-scale
|
||||
main: dist/dist.css
|
||||
|
||||
name: Grey Scale
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.16
|
||||
marketing_url: https://github.com/hkp2k/sn-theme-grey-scale
|
||||
description: Grey Scale theme for Standard Notes.
|
||||
|
||||
statusBar: grey-scale
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#2f2f2f'
|
||||
foreground_color: '#404040'
|
||||
border_color: '#2f2f2f'
|
||||
...
|
||||
20
extensions/gruvbox-dark-theme.yaml
Normal file
20
extensions/gruvbox-dark-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.christianhans.sn-gruvbox-dark-theme
|
||||
github: christianhans/sn-gruvbox-dark-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Gruvbox Dark Theme
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 0.0.16
|
||||
marketing_url: https://github.com/christianhans/sn-gruvbox-dark-theme
|
||||
thumbnail_url: https://raw.githubusercontent.com/christianhans/sn-gruvbox-dark-theme/master/preview.png
|
||||
description: Standard Notes theme based on colors from the gruvbox theme for Vim.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#D79921'
|
||||
foreground_color: '#076678'
|
||||
border_color: '#D79921'
|
||||
...
|
||||
20
extensions/gruvbox-muted-theme-blue.yaml
Normal file
20
extensions/gruvbox-muted-theme-blue.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.xthursdayx.sn-gruvbox-muted-theme-blue
|
||||
github: xthursdayx/sn-gruvbox-muted-theme
|
||||
main: blue/dist/dist.css
|
||||
|
||||
name: Gruvbox Muted Theme Blue
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 0.0.1
|
||||
marketing_url: https://github.com/xthursdayx/sn-gruvbox-muted-theme/
|
||||
thumbnail_url: https://raw.githubusercontent.com/xthursdayx/sn-gruvbox-muted-theme/main/blue/blue-screenshot.png
|
||||
description: Gruvbox Blue Muted Theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#458588'
|
||||
foreground_color: '#3c3836'
|
||||
border_color: '#458588'
|
||||
...
|
||||
20
extensions/horizon-dark-theme.yaml
Normal file
20
extensions/horizon-dark-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: org.github.shouhu21.sn-theme-horizon-dark
|
||||
github: shouhu21/sn-theme-horizon-dark
|
||||
main: dist/dist.css
|
||||
|
||||
name: Horizon Dark
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0
|
||||
marketing_url: https://github.com/shouhu21/sn-theme-horizon-dark
|
||||
thumbnail_url: https://raw.githubusercontent.com/shouhu21/sn-theme-horizon-dark/main/preview.png
|
||||
description: Standard Notes theme based on colors from the Horizon theme for VSCode.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#1a1c23'
|
||||
foreground_color: '#fdf0ed'
|
||||
border_color: '#1a1c23'
|
||||
...
|
||||
14
extensions/indent-editor.yaml
Normal file
14
extensions/indent-editor.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
id: dev.maxlap.indent_editor
|
||||
github: MaxLap/standard-notes-indent-editor
|
||||
main: index.html
|
||||
|
||||
name: Indent Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.6.0
|
||||
marketing_url: https://github.com/MaxLap/standard-notes-indent-editor
|
||||
thumbnail_url:
|
||||
description: A plain text editor with improved usability and readability.
|
||||
flags: []
|
||||
...
|
||||
20
extensions/less-distraction-theme.yaml
Normal file
20
extensions/less-distraction-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.xthursdayx.less-distraction
|
||||
github: xthursdayx/sn-less-distraction
|
||||
main: dist/dist.css
|
||||
|
||||
name: Less Distraction
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2.4
|
||||
marketing_url: https://github.com/xthursdayx/sn-less-distraction
|
||||
thumbnail_url: https://raw.githubusercontent.com/xthursdayx/sn-less-distraction/master/screenshot.png
|
||||
description: A theme for focusing on your writing.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#FFFFFF'
|
||||
foreground_color: '#FFFFFF'
|
||||
border_color: '#FFFFFF'
|
||||
...
|
||||
19
extensions/macos-dark-theme.yaml
Normal file
19
extensions/macos-dark-theme.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
id: io.github.mjfakler.sn-macos-dark-theme
|
||||
github: mjfakler/sn-macos-dark-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: macOS Dark Theme
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.3
|
||||
marketing_url: https://github.com/mjfakler/sn-macos-dark-theme
|
||||
description: macOS Dark Mode theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#3a3a3c'
|
||||
foreground_color: '#FAFBFF'
|
||||
border_color: '#2c2c2e'
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.simple-markdown-editor
|
||||
npm: sn-simple-markdown-editor
|
||||
github: sn-extensions/simple-markdown-editor
|
||||
github: standardnotes/markdown-basic
|
||||
main: dist/index.html
|
||||
|
||||
name: Simple Markdown Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.6
|
||||
version: 1.4.0
|
||||
marketing_url: https://standardnotes.org/extensions/simple-markdown-editor
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/simple-markdown.jpg
|
||||
description: A Markdown editor with dynamic split-pane preview.
|
||||
@@ -1,14 +1,14 @@
|
||||
---
|
||||
id: org.standardnotes.advanced-markdown-editor
|
||||
npm: sn-advanced-markdown-editor
|
||||
github: sn-extensions/advanced-markdown-editor
|
||||
main: index.html
|
||||
github: standardnotes/markdown-pro
|
||||
main: dist/index.html
|
||||
|
||||
name: Advanced Markdown Editor
|
||||
name: Markdown Pro
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.2
|
||||
marketing_url: https://standardnotes.org/extensions/advanced-markdown
|
||||
version: 1.3.14
|
||||
marketing_url: https://standardnotes.com/features/markdown-pro
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/adv-markdown.jpg
|
||||
description: A fully featured Markdown editor that supports live preview, a styling toolbar, and split pane support.
|
||||
flags: []
|
||||
20
extensions/material-theme.yaml
Normal file
20
extensions/material-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.xthursdayx.sn-material-theme
|
||||
github: xthursdayx/sn-theme-material
|
||||
main: dist/dist.css
|
||||
|
||||
name: Material Theme
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.6
|
||||
marketing_url: https://github.com/xthursdayx/sn-theme-material
|
||||
thumbnail_url: https://raw.githubusercontent.com/xthursdayx/sn-theme-material/master/screenshot.png
|
||||
description: Material Theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#263238'
|
||||
foreground_color: '#FFFFFF'
|
||||
border_color: '#009688'
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.fancy-markdown-editor
|
||||
npm: sn-fancy-markdown-editor
|
||||
github: sn-extensions/math-editor
|
||||
github: standardnotes/math-editor
|
||||
main: index.html
|
||||
|
||||
name: Math Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.2
|
||||
version: 1.3.4
|
||||
marketing_url: https://standardnotes.org/extensions/math-editor
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/fancy-markdown.jpg
|
||||
description: A beautiful split-pane Markdown editor with synced-scroll and LaTeX support. When LaTeX is detected, makes external render network request.
|
||||
12
extensions/mfa-link.yaml
Normal file
12
extensions/mfa-link.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
id: org.standardnotes.mfa-link
|
||||
npm: sn-mfa-link
|
||||
github: standardnotes/mfa-link
|
||||
main: dist/index.html
|
||||
|
||||
name: 2FA Manager
|
||||
content_type: SN|Component
|
||||
area: modal
|
||||
version: 1.2.5
|
||||
description: Configure two-factor authentication to add an extra level of security to your account.
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.theme-midnight
|
||||
npm: sn-theme-midnight
|
||||
github: sn-extensions/midnight-theme
|
||||
github: standardnotes/midnight-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Midnight
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2.1
|
||||
version: 1.2.4
|
||||
marketing_url: https://standardnotes.org/extensions/midnight
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/themes/midnight-with-mobile.jpg
|
||||
description: Elegant utilitarianism.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.minimal-markdown-editor
|
||||
npm: sn-minimal-markdown-editor
|
||||
github: sn-extensions/minimal-markdown-editor
|
||||
github: standardnotes/minimal-markdown-editor
|
||||
main: index.html
|
||||
|
||||
name: Minimal Markdown Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.2
|
||||
version: 1.3.7
|
||||
marketing_url: https://standardnotes.org/extensions/minimal-markdown-editor
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/min-markdown.jpg
|
||||
description: A minimal Markdown editor with live rendering and in-text search via Ctrl/Cmd + F
|
||||
|
||||
20
extensions/mojave-dark-theme.yaml
Normal file
20
extensions/mojave-dark-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.matthew-cox.mojave-dark-mode
|
||||
github: matthew-cox/sn-theme-mojave-dark-mode
|
||||
main: dist/mojave-dark-mode.css
|
||||
|
||||
name: Mojave Dark Mode
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: v0.0.3
|
||||
marketing_url: https://github.com/matthew-cox/sn-theme-mojave-dark-mode
|
||||
thumbnail_url: https://github.com/matthew-cox/sn-theme-mojave-dark-mode/raw/master/preview.png
|
||||
description: Standard Notes theme which roughly matches Mojave Dark Mode..
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#585858'
|
||||
foreground_color: '#ffffff'
|
||||
border_color: '#585858'
|
||||
...
|
||||
20
extensions/monochrome-dark-theme.yaml
Normal file
20
extensions/monochrome-dark-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: tech.gunderson.sn-theme-monochrome-dark
|
||||
github: Parkertg/sn-theme-monochrome-dark
|
||||
main: main.css
|
||||
|
||||
name: Monochrome Dark
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2
|
||||
marketing_url: https://github.com/Parkertg/sn-theme-monochrome-dark
|
||||
thumbnail_url: https://raw.githubusercontent.com/Parkertg/sn-theme-monochrome-dark/main/preview.png
|
||||
description: A near-monochrome dark theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#adadad'
|
||||
foreground_color: '#ffffff'
|
||||
border_color: '#ffffff'
|
||||
...
|
||||
20
extensions/muted-dark-theme.yaml
Normal file
20
extensions/muted-dark-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.ntran.sn-theme-muteddark
|
||||
github: ntran/sn-theme-muteddark
|
||||
main: dist/dist.css
|
||||
|
||||
name: Muted Dark
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.9
|
||||
marketing_url: https://github.com/ntran/sn-theme-muteddark
|
||||
thumbnail_url: https://raw.githubusercontent.com/ntran/sn-theme-muteddark/master/thumbnail.png
|
||||
description: A dark theme with muted colors for Standard Notes
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#1e1e1e'
|
||||
foreground_color: '#1e1e1e'
|
||||
border_color: '#127766'
|
||||
...
|
||||
19
extensions/no-distraction-dynamic-theme.yaml
Normal file
19
extensions/no-distraction-dynamic-theme.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
id: com.iganesh.theme-no-distraction-dynamic
|
||||
github: iganeshk/sn-theme-no-distraction-dynamic
|
||||
main: dist/dist.css
|
||||
|
||||
name: No Distraction (Dynamic)
|
||||
layerable: true
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.0
|
||||
marketing_url: https://standardnotes.org/extensions/dynamic
|
||||
description: A smart theme that minimizes the tags and notes panels when they are not in use.
|
||||
|
||||
dock_icon:
|
||||
type: svg
|
||||
source: |-
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M15.093 6.694h0.92v2.862l3.987-4.024-3.988-4.025v2.387h-0.92c-3.694 0-5.776 2.738-7.614 5.152-1.652 2.172-3.080 4.049-5.386 4.049h-2.092v2.799h2.093c3.694 0 5.776-2.736 7.614-5.152 1.652-2.173 3.080-4.048 5.386-4.048zM5.41 8.458c0.158-0.203 0.316-0.412 0.477-0.623 0.39-0.514 0.804-1.055 1.252-1.596-1.322-1.234-2.915-2.144-5.046-2.144h-2.093v2.799h2.093c1.327 0 2.362 0.623 3.317 1.564zM16.012 13.294h-0.92c-1.407 0-2.487-0.701-3.491-1.738-0.1 0.131-0.201 0.264-0.303 0.397-0.441 0.58-0.915 1.201-1.439 1.818 1.356 1.324 3 2.324 5.232 2.324h0.92v2.398l3.989-4.025-3.988-4.025v2.851z"></path></svg>
|
||||
# Shuffle Icon from Entypo by Daniel Bruce
|
||||
...
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: org.standardnotes.theme-no-distraction
|
||||
npm: sn-theme-no-distraction
|
||||
github: sn-extensions/no-distraction-theme
|
||||
github: standardnotes/no-distraction-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: No Distraction
|
||||
|
||||
20
extensions/nord-theme.yaml
Normal file
20
extensions/nord-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.xthursdayx.sn-nord-theme
|
||||
github: xthursdayx/sn-nord-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Nord Theme
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.1
|
||||
marketing_url: https://github.com/xthursdayx/sn-nord-theme
|
||||
thumbnail_url: https://raw.githubusercontent.com/lzambarda/sn-nord-theme/master/preview.png
|
||||
description: An arctic, north-bluish clean and elegant Standard Notes theme.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#88C0D0'
|
||||
foreground_color: '#88C0D0'
|
||||
border_color: '#88C0D0'
|
||||
...
|
||||
20
extensions/one-dark-theme.yaml
Normal file
20
extensions/one-dark-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: org.matt-anderson.sn-onedark
|
||||
github: matta9001/sn-onedark
|
||||
main: dist/dist.css
|
||||
|
||||
name: One Dark
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.3.3
|
||||
marketing_url: https://github.com/matta9001/sn-onedark
|
||||
thumbnail_url: https://raw.githubusercontent.com/matta9001/sn-onedark/main/colors.png
|
||||
description: Atom one dark background colors for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#61afef'
|
||||
foreground_color: '#ffffff'
|
||||
border_color: '#61afef'
|
||||
...
|
||||
20
extensions/one-darker-theme.yaml
Normal file
20
extensions/one-darker-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.eenpadvinder.standardnotes-theme-one-darker
|
||||
github: eenpadvinder/standardnotes-theme-one-darker
|
||||
main: dist/dist.css
|
||||
|
||||
name: One Dark Darker
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 0.2.1
|
||||
marketing_url: https://github.com/eenpadvinder/standardnotes-theme-one-darker
|
||||
thumbnail_url: https://raw.githubusercontent.com/eenpadvinder/standardnotes-theme-one-darker/master/preview.png
|
||||
description: VS Code One Dark Darker theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#181a1f'
|
||||
foreground_color: '#181a1f'
|
||||
border_color: '#d55fde'
|
||||
...
|
||||
@@ -6,10 +6,12 @@ main: dist/dist.css
|
||||
name: Overcast
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.1.2
|
||||
description: Overcast to become cloudy or dark — just like this theme.
|
||||
version: 1.2.2
|
||||
marketing_url: https://github.com/ceiphr/sn-overcast-theme
|
||||
thumbnail_url: https://camo.githubusercontent.com/4ecbeeda63c4fa66b874e6860c0e2b2963eb752e/68747470733a2f2f63646e2e6365697068722e696f2f7374616e646172646e6f7465732f6f766572636173742f736e2d6f766572636173742d7468656d652d73637265656e73686f742e706e67
|
||||
thumbnail_url: https://raw.githubusercontent.com/ceiphr/sn-overcast-theme/master/overcast.png
|
||||
description: Overcast to become cloudy or dark — just like this theme.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: "#039be5"
|
||||
|
||||
19
extensions/pencil-theme.yaml
Normal file
19
extensions/pencil-theme.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
id: io.github.xthursdayx.sn-pencil-theme
|
||||
github: xthursdayx/sn-pencil-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Pencil Theme
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.3
|
||||
marketing_url: https://github.com/xthursdayx/sn-pencil-theme
|
||||
description: A dark, writing-oriented theme.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#AE422F'
|
||||
foreground_color: '#000000'
|
||||
border_color: '#AE422F'
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.plus-editor
|
||||
npm: sn-plus-editor
|
||||
github: sn-extensions/plus-editor
|
||||
main: index.html
|
||||
github: standardnotes/plus-editor
|
||||
main: dist/index.html
|
||||
|
||||
name: Plus Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.2
|
||||
version: 1.5.0
|
||||
marketing_url: https://standardnotes.org/extensions/plus-editor
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/plus-editor.jpg
|
||||
description: From highlighting to custom font sizes and colors, to tables and lists, this editor is perfect for crafting any document.
|
||||
|
||||
20
extensions/pure-black-theme.yaml
Normal file
20
extensions/pure-black-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.github.christianhans.sn-pure-black-theme
|
||||
github: christianhans/sn-pure-black-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Pure Black
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.9
|
||||
marketing_url: https://github.com/christianhans/sn-pure-black-theme
|
||||
thumbnail_url: https://raw.githubusercontent.com/christianhans/sn-pure-black-theme/master/preview1.png
|
||||
description: Theme optimized for Optimized for OLED devices such as iPhone X.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#000000'
|
||||
foreground_color": '#FAFBFF'
|
||||
border_color: '#2A2A2B'
|
||||
...
|
||||
15
extensions/rich-markdown-editor.yaml
Normal file
15
extensions/rich-markdown-editor.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
id: com.github.arturolinares.sn-rme
|
||||
npm: sn-advanced-markdown-editor
|
||||
github: arturolinares/sn-rme
|
||||
main: build/index.html
|
||||
|
||||
name: Rich Markdown Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 0.18.0
|
||||
marketing_url: https://github.com/arturolinares/sn-rme
|
||||
thumbnail_url: https://github.com/arturolinares/sn-rme/raw/master/build/logo512.png
|
||||
description: A WYSIWYG Markdown editor that supports youtube embeds.
|
||||
flags: []
|
||||
...
|
||||
14
extensions/scratch-editor.yaml
Normal file
14
extensions/scratch-editor.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
id: com.dylanonelson.sn-scratch-editor
|
||||
github: dylanonelson/sn-scratch-editor
|
||||
main: dist/index.html
|
||||
|
||||
name: Scratch Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 0.0.41
|
||||
marketing_url: https://dylanonelson.github.io/sn-scratch-editor
|
||||
thumbnail_url:
|
||||
description: An editor for writing things down.
|
||||
flags: []
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.standard-sheets
|
||||
npm: sn-spreadsheets
|
||||
github: sn-extensions/secure-spreadsheets
|
||||
github: standardnotes/secure-spreadsheets
|
||||
main: dist/index.html
|
||||
|
||||
name: Secure Spreadsheets
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.3
|
||||
version: 1.4.0
|
||||
marketing_url:
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/spreadsheets.png
|
||||
description: A powerful spreadsheet editor with formatting and formula support. Not recommended for large data sets, as encryption of such data may decrease editor performance.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.simple-task-editor
|
||||
npm: sn-simple-task-editor
|
||||
github: sn-extensions/simple-task-editor
|
||||
github: standardnotes/simple-task-editor
|
||||
main: dist/index.html
|
||||
|
||||
name: Simple Task Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.3
|
||||
version: 1.3.7
|
||||
marketing_url: https://standardnotes.org/extensions/simple-task-editor
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/task-editor.jpg
|
||||
description: A great way to manage short-term and long-term to-do's. You can mark tasks as completed, change their order, and edit the text naturally in place.
|
||||
|
||||
20
extensions/slate-theme.yaml
Normal file
20
extensions/slate-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: space.yuggoth.sn-slate-theme
|
||||
github: yithian/slate-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Slate
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: v2.2.0
|
||||
marketing_url: https://github.com/yithian/slate-theme
|
||||
thumbnail_url: https://raw.githubusercontent.com/yithian/slate-theme/main/images/sn-screenshot.png
|
||||
description: A theme with shady grey and mossy green highlights.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#252A2F'
|
||||
foreground_color: '#252A2F'
|
||||
border_color: '#8A9A5B'
|
||||
...
|
||||
13
extensions/sn-ia-writer-quattro-theme.yaml
Normal file
13
extensions/sn-ia-writer-quattro-theme.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
id: io.xthursdayx.sn-ia-writer-quattro
|
||||
github: xthursdayx/sn-ia-writer-quattro
|
||||
main: dist/theme.css
|
||||
|
||||
name: SN iA Writer Quattro
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.5
|
||||
marketing_url: https://github.com/xthursdayx/sn-ia-writer-quattro
|
||||
description: Replace all monospace and sans-serif fonts with iA Writer Quattro.
|
||||
layerable: true
|
||||
...
|
||||
@@ -1,17 +1,18 @@
|
||||
---
|
||||
id: org.standardnotes.theme-solarized-dark
|
||||
npm: sn-theme-solarized-dark
|
||||
github: sn-extensions/solarized-dark-theme
|
||||
github: standardnotes/solarized-dark-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Solarized Dark
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2.1
|
||||
version: 1.2.3
|
||||
marketing_url: https://standardnotes.org/extensions/solarized-dark
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/themes/solarized-dark.jpg
|
||||
description: The perfect theme for any time.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#2AA198'
|
||||
|
||||
20
extensions/subtle-dark-theme.yaml
Normal file
20
extensions/subtle-dark-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: tech.gunderson.sn-theme-subtle-dark
|
||||
github: Parkertg/sn-theme-subtle-dark
|
||||
main: dist/dist.css
|
||||
|
||||
name: Subtle Dark
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.1
|
||||
marketing_url: https://github.com/Parkertg/sn-theme-subtle-dark
|
||||
thumbnail_url: https://raw.githubusercontent.com/Parkertg/sn-theme-subtle-dark/main/preview.png
|
||||
description: A low saturation orangish dark theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#897860'
|
||||
foreground_color: '#c9d5d5'
|
||||
border_color: '#897860'
|
||||
...
|
||||
19
extensions/subtle-light-theme.yaml
Normal file
19
extensions/subtle-light-theme.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
id: tech.gunderson.sn-theme-subtle-light
|
||||
github: Parkertg/sn-theme-subtle-light
|
||||
main: dist/dist.css
|
||||
|
||||
name: Subtle Light
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0
|
||||
marketing_url: https://github.com/Parkertg/sn-theme-subtle-light
|
||||
thumbnail_url: https://raw.githubusercontent.com/Parkertg/sn-theme-subtle-light/main/preview.png
|
||||
description: A lower saturation/contrast light theme for Standard Notes.
|
||||
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#edddc4'
|
||||
foreground_color: '#ffffff'
|
||||
border_color: '#ffffff'
|
||||
...
|
||||
20
extensions/tangerine-theme.yaml
Normal file
20
extensions/tangerine-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.shompoe.sn-tangerine-theme
|
||||
github: shompoe/sn-tangerine-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Tangerine Theme
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 2.0.3
|
||||
marketing_url: https://github.com/shompoe/sn-tangerine-theme
|
||||
thumbnail_url: https://raw.githubusercontent.com/shompoe/sn-tangerine-theme/master/preview.png
|
||||
description: Theme based on the Gruvbox Dark Theme with more orange highlights.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#D79921'
|
||||
foreground_color: '#076678'
|
||||
border_color: '#D79921'
|
||||
...
|
||||
@@ -1,17 +1,18 @@
|
||||
---
|
||||
id: org.standardnotes.theme-titanium
|
||||
npm: sn-theme-titanium
|
||||
github: sn-extensions/titanium-theme
|
||||
github: standardnotes/titanium-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Titanium
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.2.2
|
||||
version: 1.2.4
|
||||
marketing_url: https://standardnotes.org/extensions/titanium
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/themes/titanium-with-mobile.jpg
|
||||
description: Light on the eyes, heavy on the spirit.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#6e2b9e'
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
---
|
||||
id: org.standardnotes.token-vault
|
||||
npm: sn-token-vault
|
||||
github: sn-extensions/token-vault
|
||||
github: standardnotes/token-vault
|
||||
main: dist/index.html
|
||||
|
||||
name: TokenVault
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.0.4
|
||||
version: 2.0.1
|
||||
thumbnail_url: https://standard-notes.s3.amazonaws.com/screenshots/models/editors/token-vault.png
|
||||
description: Encrypt and protect your 2FA secrets for all your internet accounts. TokenVault handles your 2FA secrets so that you never lose them again, or have to start over when you get a new device.
|
||||
flags: [Beta]
|
||||
flags: []
|
||||
...
|
||||
|
||||
14
extensions/ultimate-editor.yaml
Normal file
14
extensions/ultimate-editor.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
id: dev.dec0dOS.ultimate_editor
|
||||
github: dec0dOS/standard-notes-ultimate-editor
|
||||
main: public/index.html
|
||||
|
||||
name: Ultimate Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 2.7.2
|
||||
marketing_url: https://github.com/dec0dOS/standard-notes-ultimate-editor
|
||||
thumbnail_url:
|
||||
description: Markdown editor with improved mobile support and performance.
|
||||
flags: []
|
||||
...
|
||||
20
extensions/uniform-dark-plus-theme.yaml
Normal file
20
extensions/uniform-dark-plus-theme.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.xthursdayx.uniform-dark-theme
|
||||
github: xthursdayx/uniform-dark-theme-sn
|
||||
main: dist/dist.css
|
||||
|
||||
name: Uniform Dark+
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.4
|
||||
marketing_url: https://github.com/xthursdayx/uniform-dark-theme-sn/
|
||||
thumbnail_url: https://github.com/xthursdayx/uniform-dark-theme-sn/blob/master/Images/preview.png
|
||||
description: Theme inspired by Visual Studio Code's default dark theme, designed for Standard Notes. It is loosely based off my other theme that unifies VS Code's default dark theme.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#1e1e1efc'
|
||||
foreground_color: '#d4d4d4fc'
|
||||
border_color: '#414141fc'
|
||||
...
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: org.standardnotes.vim-editor
|
||||
npm: sn-vim-editor
|
||||
github: sn-extensions/vim-editor
|
||||
github: standardnotes/vim-editor
|
||||
main: index.html
|
||||
|
||||
name: Vim Editor
|
||||
content_type: SN|Component
|
||||
area: editor-editor
|
||||
version: 1.3.2
|
||||
version: 1.3.7
|
||||
marketing_url: https://standardnotes.org/extensions/vim-editor
|
||||
thumbnail_url: https://s3.amazonaws.com/standard-notes/screenshots/models/editors/vim.jpg
|
||||
description: A code editor with Vim key bindings.
|
||||
|
||||
19
extensions/vs-code-theme.yaml
Normal file
19
extensions/vs-code-theme.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
id: io.github.hyphone.sn-theme-vscode
|
||||
github: hyphone/sn-theme-vscode
|
||||
main: dist.css
|
||||
|
||||
name: VS Code Theme
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.30
|
||||
marketing_url: https://github.com/hyphone/sn-theme-vscode
|
||||
thumbnail_url: https://github.com/hyphone/sn-theme-vscode/raw/master/screenshot.png
|
||||
description: A theme for Standard Notes inspired by the VS Code Dark theme.
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#252526'
|
||||
foreground_color: '#D4D4D4'
|
||||
border_color: '#7ba78a'
|
||||
...
|
||||
20
extensions/yaru-theme.yml
Normal file
20
extensions/yaru-theme.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: io.ceiphr.yaru
|
||||
github: ceiphr/sn-yaru-theme
|
||||
main: dist/dist.css
|
||||
|
||||
name: Yaru
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: 1.0.7
|
||||
marketing_url: https://github.com/ceiphr/sn-yaru-theme
|
||||
thumbnail_url: https://raw.githubusercontent.com/ceiphr/sn-yaru-theme/master/yaru.png
|
||||
description: This is an unofficial Yaru theme for Standard Notes.
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#df4a16'
|
||||
foreground_color: '#ffffff'
|
||||
border_color: '#df4a16'
|
||||
...
|
||||
28
standardnotes-extensions-list.txt
Normal file
28
standardnotes-extensions-list.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
#############################################################################
|
||||
# List of standard notes's extensions who's identifier need to be modified to
|
||||
# get around the issue: https://github.com/standardnotes/desktop/issues/789
|
||||
#############################################################################
|
||||
action-bar.yaml
|
||||
autobiography-theme.yaml
|
||||
autocomplete-tags.yaml
|
||||
bold-editor.yaml
|
||||
code-editor.yaml
|
||||
dynamic-theme.yaml
|
||||
focus-theme.yaml
|
||||
folders-component.yaml
|
||||
futura-theme.yaml
|
||||
github-push.yaml
|
||||
markdown-basic.yaml
|
||||
markdown-pro-editor.yaml
|
||||
math-editor.yaml
|
||||
mfa-link.yaml
|
||||
midnight-theme.yaml
|
||||
minimal-markdown-editor.yaml
|
||||
no-distraction-theme.yaml
|
||||
plus-editor.yaml
|
||||
secure-spreadsheets.yaml
|
||||
simple-task-editor.yaml
|
||||
solarized-dark-theme.yaml
|
||||
titanium-theme.yaml
|
||||
token-vault.yaml
|
||||
vim-editor.yaml
|
||||
20
theme.yaml.sample
Normal file
20
theme.yaml.sample
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: <tld.domain.organization.theme-name>
|
||||
github: <organization/repository>
|
||||
main: <dist/dist.css>
|
||||
|
||||
name: <Theme_Name>
|
||||
content_type: SN|Theme
|
||||
area: themes
|
||||
version: <0.0.1>
|
||||
marketing_url: <https://github.com/organization/theme>
|
||||
thumbnail_url: <https://raw.githubusercontent.com/organization/theme/master/thumbnail.png>
|
||||
description: <Description of theme>
|
||||
|
||||
statusBar: dark-content
|
||||
dock_icon:
|
||||
type: circle
|
||||
background_color: '#726a7b' #your chosen icon background color
|
||||
foreground_color: '#ffffff' #your chosen icon foreground color
|
||||
border_color: '#726a7b' #your chosen icon border color
|
||||
...
|
||||
Reference in New Issue
Block a user