adding standardnotes-extensions as submodule

This commit is contained in:
Hugo Willaume 2022-02-17 18:21:35 +01:00
parent 05c1a74e9c
commit 426d446d0c
50 changed files with 1401 additions and 0 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "notes/standardnotes-extensions"]
path = notes/standardnotes-extensions
url = https://github.com/iganeshk/standardnotes-extensions.git

View File

@ -0,0 +1,167 @@
public
.env
### Python.gitignore
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
### macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

View File

@ -0,0 +1,8 @@
FROM python:3-alpine
WORKDIR /build
COPY requirements.txt build_repo.py ./
RUN pip3 install -r requirements.txt
ENTRYPOINT python3 build_repo.py

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Ganesh Kumar
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,154 @@
![Standard Notes Extension Repository](../assets/standardnotes.png?raw=true)
## 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/)
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
* Clone this repository to the web-server:
```bash
$ git clone https://github.com/iganeshk/standardnotes-extensions.git
$ cd standardnotes-extensions
$ pip3 install -r requirements.txt
```
* Use the env.sample to create a .env file for your environment variables. The utility will automatically load these when it starts.
```
# Sample ENV setup Variables (YAML)
# Copy this file and update as needed.
#
# $ cp env.sample .env
#
# Do not include this new file in source control
# Github Credentials
# Generate your token here: https://github.com/settings/tokens
# No additional permission required, this is just to avoid github api rate limits
#
domain: https://your-domain.com/extensions
github:
username: USERNAME
token: TOKEN
```
* [Optional] Make additions or appropriate changes in `/extensions` directory.
* Run the utility:
```bash
$ python3 build_repo.py
```
* Serve the `/public` directory and verify if 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)
### Docker
* To via Docker, clone the repository, set up the .env file, and optionally modify the `extensions` directory, following the instructions above.
* Then pull and run run the container, specifying the mount points for the `.env` file, the `extensions` directory, and the `public` directory, where the output will be placed:
```bash
$ docker run \
-v $PWD/.env:/build/.env \
-v $PWD/extensions:/build/extensions \
-v $PWD/public:/build/public \
mtoohey/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: mtoohey/standardnotes-extensions
restart: "no"
volumes:
- $HOME/standardnotes-extensions/.env:/build/.env
- $HOME/standardnotes-extensions/extensions:/build/extensions
- 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 -t standardnotes-extensions .
```
### Setup with nginx
```nginx
location ^~ /extensions {
autoindex off;
alias /path/to/standardnotes-extensions/public;
# CORS HEADERS
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# 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';
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
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-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-Expose-Headers' 'Content-Length,Content-Range';
}
}
```
### Acknowledgments
* 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

View File

@ -0,0 +1,283 @@
#!/usr/bin/env/ python3
# coding=utf-8
'''
Parse extensions/*.yaml files & build a directory with following structure:
public/
|-my-extension-1/
| |-1.0.0/ <- version (to avoid static file caching issues)
| | |-index.json <- extension info
| | |-index.html <- extension entrance (component)
| | |-dist <- extension resources
| | |-... <- other files
|-index.json <- repo info, contain all extensions' info
'''
from subprocess import run, PIPE
import sys
import os
import json
import shutil
from zipfile import ZipFile
import requests
import yaml
def get_environment(base_dir):
"""
Parse the environment variables from .env
"""
temp_envvar = yaml.load("""
domain: https://domain.com/extensions
github:
username:
token:
""", Loader=yaml.FullLoader)
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)
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:
for member in zipball.namelist():
# Parse files list excluding the top/parent/root directory
filename = '/'.join(member.split('/')[1:])
# Now ignore it
if filename == '': continue
# Ignore dot files
if filename.startswith('.'): continue
source = zipball.open(member)
try:
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")
shutil.copyfileobj(source, target)
except (FileNotFoundError, IsADirectoryError):
# Create the directory
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):
"""
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", "")
# 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
def parse_extensions(base_dir, base_url, ghub_session):
"""
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)
extensions = []
# Get all extensions, sort extensions alphabetically along by their by type
extfiles = [x for x in sorted(os.listdir(extension_dir)) if not x.endswith('theme.yaml') and x.endswith('.yaml')]
themefiles = [x for x in sorted(os.listdir(extension_dir)) if x.endswith('theme.yaml')]
extfiles.extend(themefiles)
for extfile in extfiles:
with open(os.path.join(extension_dir, 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 Session, do git-clone instead
if ghub_session is not None:
# Get extension's github release meta-data
ext_git_info = json.loads(
ghub_session.get(
'https://api.github.com/repos/{github}/releases/latest'.
format(**ext_yaml)).text)
try:
ext_version = ext_git_info['tag_name']
except KeyError:
# No release's found
print(
"Error: Unable to update %s (%s) does it have a release at Github?"
% (ext_yaml['name'], extfile))
continue
# Check if extension directory already exists
if not os.path.exists(repo_dir):
os.makedirs(repo_dir)
# 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:
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)
# Build extension info (stateless)
# https://domain.com/sub-domain/my-extension/index.json
extension = dict(
identifier=ext_yaml['id'],
name=ext_yaml['name'],
content_type=ext_yaml['content_type'],
area=ext_yaml.get('area', None),
version=ext_version,
description=ext_yaml.get('description', None),
marketing_url=ext_yaml.get('marketing_url', None),
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),
latest_url='/'.join([base_url, repo_name, 'index.json']),
flags=ext_yaml.get('flags', []),
dock_icon=ext_yaml.get('dock_icon', {}),
layerable=ext_yaml.get('layerable', None),
statusBar=ext_yaml.get('statusBar', None),
)
# Strip empty values
extension = {k: v for k, v in extension.items() if v}
# 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'),
'w') as ext_json:
json.dump(extension, ext_json, indent=4)
if extfile.endswith("theme.yaml"):
print('Theme: {:34s} {:6s}\t(updated)'.format(
ext_yaml['name'], ext_version))
else:
print('Extension: {:30s} {:6s}\t(updated)'.format(
ext_yaml['name'], ext_version))
else:
# ext already up-to-date
if extfile.endswith("theme.yaml"):
print('Theme: {:34s} {:6s}\t(already up-to-date)'.format(
ext_yaml['name'], ext_version))
else:
print('Extension: {:30s} {:6s}\t(already up-to-date)'.format(
ext_yaml['name'], ext_version))
extensions.append(extension)
os.chdir('..')
# Generate the main repository index JSON
# https://domain.com/sub-domain/my-index.json
with open(os.path.join(public_dir, 'index.json'), 'w') as ext_json:
json.dump(
dict(
content_type='SN|Repo',
valid_until='2030-05-16T18:35:33.000Z',
packages=extensions,
),
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 main():
"""
teh main function
"""
base_dir = os.path.dirname(os.path.abspath(__file__))
# Get environment variables
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 occurred: %s" % e)
# Build extensions
parse_extensions(base_dir, base_url, ghub_session)
# Terminate Session
ghub_session.close()
else:
# Environment file missing
print(
"Environment variables not set (have a look at env.sample). Using Git Clone method instead"
)
input(
"⚠️ this is an in-efficient process, Press any key to continue:\n")
parse_extensions(base_dir, base_url, None)
sys.exit(0)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.action-bar
npm: sn-action-bar
github: standardnotes/action-bar
main: index.html
name: ActionBar
content_type: SN|Component
area: editor-stack
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.
flags: []
...

View File

@ -0,0 +1,20 @@
---
id: org.standardnotes.theme-autobiography
npm: sn-theme-autobiography
github: standardnotes/autobiography-theme
main: dist/dist.css
name: Autobiography
content_type: SN|Theme
area: themes
version: 1.0.0
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'
foreground_color: '#ECE4DB'
border_color: '#9D7441'
...

View File

@ -0,0 +1,13 @@
---
id: org.standardnotes.autocomplete-tags
npm: sn-folders-component
github: standardnotes/quick-tags
main: index.html
name: Quick Tags
content_type: SN|Component
area: note-tags
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
...

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.bold-editor
npm: sn-bold-editor
github: standardnotes/bold-editor
main: dist/index.html
name: Bold Editor
content_type: SN|Component
area: editor-editor
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.
flags: []
...

View File

@ -0,0 +1,14 @@
---
id: org.standardnotes.code-editor
npm: sn-code-editor
github: standardnotes/code-editor
main: index.html
name: Code Editor
content_type: SN|Component
area: editor-editor
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.
...

View File

@ -0,0 +1,20 @@
---
id: ml.xnor.sn-theme-dracula
github: dracula/standard-notes
main: dist/dist.css
name: Dracula
content_type: SN|Theme
area: themes
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: '#bd93f9'
foreground_color: '#bd93f9'
border_color: '#bd93f9'
...

View File

@ -0,0 +1,20 @@
---
id: org.standardnotes.theme-dynamic
npm: sn-theme-dynamic
github: standardnotes/dynamic-theme
main: dist/dist.css
name: 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
...

View File

@ -0,0 +1,20 @@
---
id: io.github.ilindaniel.sn-theme-evernote-dark
github: ilindaniel/sn-theme-evernote-dark
main: dist/dist.css
name: Evernote-style Dark Theme
content_type: SN|Theme
area: themes
version: v1.2
marketing_url: https://github.com/ilindaniel/sn-theme-evernote-dark
thumbnail_url: https://raw.githubusercontent.com/ilindaniel/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'
...

View File

@ -0,0 +1,20 @@
---
id: org.standardnotes.theme-focus
npm: sn-theme-focus
github: standardnotes/focus-theme
main: dist/dist.css
name: Focus
content_type: SN|Theme
area: themes
version: 1.2.3
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.
dock_icon:
type: circle
background_color: '#a464c2'
foreground_color: '#ffffff'
border_color: '#a464c2'
...

View File

@ -0,0 +1,13 @@
---
id: org.standardnotes.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.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
...

View File

@ -0,0 +1,21 @@
---
id: org.standardnotes.theme-futura
npm: sn-futura-theme
github: standardnotes/futura-theme
main: dist/dist.css
name: Futura
content_type: SN|Theme
area: themes
version: 1.2.2
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'
foreground_color: '#ffffff'
border_color: '#fca429'
...

View File

@ -0,0 +1,14 @@
---
id: org.standardnotes.github-push
npm: sn-github-push
github: standardnotes/github-push
main: index.html
name: GitHub Push
content_type: SN|Component
area: editor-stack
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.
...

View 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'
...

View 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.0
marketing_url: https://github.com/shouhu21/sn-theme-horizon-dark
thumbnail_url: https://github.com/shouhu21/sn-theme-horizon-dark/blob/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'
...

View File

@ -0,0 +1,20 @@
---
id: io.github.alecstein.less-distraction
github: alecstein/sn-less-distraction
main: dist/dist.css
name: Less Distraction
content_type: SN|Theme
area: themes
version: 0.0.5
marketing_url: https://github.com/alecstein/sn-less-distraction
thumbnail_url: https://raw.githubusercontent.com/alecstein/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'
...

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.simple-markdown-editor
npm: sn-simple-markdown-editor
github: standardnotes/markdown-basic
main: dist/index.html
name: Simple Markdown Editor
content_type: SN|Component
area: editor-editor
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.
flags: []
...

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.advanced-markdown-editor
npm: sn-advanced-markdown-editor
github: standardnotes/markdown-pro
main: dist/index.html
name: Markdown Pro
content_type: SN|Component
area: editor-editor
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: []
...

View File

@ -0,0 +1,19 @@
---
id: com.vantezzen.material-theme
github: vantezzen/sn-theme-material
main: src/main.css
name: Material Theme
content_type: SN|Theme
area: themes
version: 1.0.0
marketing_url: https://github.com/vantezzen/sn-theme-material
thumbnail_url: https://raw.githubusercontent.com/vantezzen/sn-theme-material/master/screenshot.png
description: Material Theme for Standard Notes.
dock_icon:
type: circle
background_color: '#263238'
foreground_color: '#FFFFFF'
border_color: '#263238'
...

View File

@ -0,0 +1,14 @@
---
id: org.standardnotes.fancy-markdown-editor
npm: sn-fancy-markdown-editor
github: standardnotes/math-editor
main: index.html
name: Math Editor
content_type: SN|Component
area: editor-editor
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.
...

View 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.
...

View File

@ -0,0 +1,20 @@
---
id: org.standardnotes.theme-midnight
npm: sn-theme-midnight
github: standardnotes/midnight-theme
main: dist/dist.css
name: Midnight
content_type: SN|Theme
area: themes
version: 1.2.2
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.
dock_icon:
type: circle
background_color: '#086DD6'
foreground_color: '#ffffff'
border_color: '#086DD6'
...

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.minimal-markdown-editor
npm: sn-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.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
flags: []
...

View 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: 0.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'
...

View 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'
...

View 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
...

View File

@ -0,0 +1,19 @@
---
id: org.standardnotes.theme-no-distraction
npm: sn-theme-no-distraction
github: standardnotes/no-distraction-theme
main: dist/dist.css
name: No Distraction
content_type: SN|Theme
area: themes
version: 1.2.2
layerable: true
marketing_url: https://standardnotes.org/extensions/no-distraction
description: A theme for focusing on your writing.
dock_icon:
type: svg
source: |-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M424 64H88c-26.6 0-48 21.6-48 48v288c0 26.4 21.4 48 48 48h336c26.4 0 48-21.6 48-48V112c0-26.4-21.4-48-48-48zm0 336H88V176h336v224z"/></svg>
...

View File

@ -0,0 +1,19 @@
id: io.github.lzambarda.sn-nord-theme
github: lzambarda/sn-nord-theme
main: theme.css
name: Nord Theme
content_type: SN|Theme
area: themes
version: 0.0.2
marketing_url: https://github.com/lzambarda/sn-nord-theme
thumbnail_url: https://raw.githubusercontent.com/lzambarda/sn-nord-theme/master/preview.png
description: Standard Notes theme inspired by the magnificent Nord Theme.
statusBar: dark-content
dock_icon:
type: circle
background_color: '#5e81ac'
foreground_color: '#eceff4'
border_color: '#5e81ac'
...

View 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'
...

View 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'
...

View File

@ -0,0 +1,20 @@
---
id: com.ceiphr.overcast
github: ceiphr/sn-overcast-theme
main: dist/dist.css
name: Overcast
content_type: SN|Theme
area: themes
version: 1.2.0
description: Overcast to become cloudy or dark — just like this theme.
marketing_url: https://github.com/ceiphr/sn-overcast-theme
thumbnail_url: https://i.imgur.com/KDnyBGx.png
statusBar: dark-content
dock_icon:
type: circle
background_color: "#039be5"
foreground_color: "#19181a"
border_color: "#039be5"
...

View File

@ -0,0 +1,20 @@
---
id: io.github.alecstein.sn-pencil-theme
github: alecstein/sn-pencil-theme
main: dist/dist.css
name: Pencil
content_type: SN|Theme
area: themes
version: 0.1.0
marketing_url: https://github.com/alecstein/sn-pencil-theme
thumbnail_url: https://raw.githubusercontent.com/alecstein/sn-less-distraction/master/screenshot.png
description: A dark, writing-oriented theme.
statusBar: dark-content
dock_icon:
type: circle
background_color: '#AE422F'
foreground_color: '#000000'
border_color: '#AE422F'
...

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.plus-editor
npm: sn-plus-editor
github: standardnotes/plus-editor
main: dist/index.html
name: Plus Editor
content_type: SN|Component
area: editor-editor
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.
flags: []
...

View 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'
...

View 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: []
...

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.standard-sheets
npm: sn-spreadsheets
github: standardnotes/secure-spreadsheets
main: dist/index.html
name: Secure Spreadsheets
content_type: SN|Component
area: editor-editor
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.
flags: []
...

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.simple-task-editor
npm: sn-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.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.
flags: []
...

View File

@ -0,0 +1,20 @@
---
id: space.yuggoth.sn-slate-theme
github: yithian/slate-theme/
main: dist/standard-notes.css
name: Slate
content_type: SN|Theme
area: themes
version: v2.2.0
marketing_url: https://github.com/yithian/slate-theme
thumbnail_url: https://github.com/yithian/slate-theme/raw/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'
...

View File

@ -0,0 +1,21 @@
---
id: org.standardnotes.theme-solarized-dark
npm: sn-theme-solarized-dark
github: standardnotes/solarized-dark-theme
main: dist/dist.css
name: Solarized Dark
content_type: SN|Theme
area: themes
version: 1.2.1
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'
foreground_color: '#ffffff'
border_color: '#2AA198'
...

View 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'
...

View File

@ -0,0 +1,21 @@
---
id: org.standardnotes.theme-titanium
npm: sn-theme-titanium
github: standardnotes/titanium-theme
main: dist/dist.css
name: Titanium
content_type: SN|Theme
area: themes
version: 1.2.2
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'
foreground_color: '#ffffff'
border_color: '#6e2b9e'
...

View File

@ -0,0 +1,14 @@
---
id: org.standardnotes.token-vault
npm: sn-token-vault
github: standardnotes/token-vault
main: dist/index.html
name: TokenVault
content_type: SN|Component
area: editor-editor
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: []
...

View File

@ -0,0 +1,15 @@
---
id: org.standardnotes.vim-editor
npm: sn-vim-editor
github: standardnotes/vim-editor
main: index.html
name: Vim Editor
content_type: SN|Component
area: editor-editor
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.
flags: []
...

View File

@ -0,0 +1,20 @@
---
id: io.github.bscott.sn-theme-vscode
github: bscott/sn-theme-vscode
main: dist/dist.css
name: VS Code Theme
content_type: SN|Theme
area: themes
version: 1.0.16
marketing_url: https://github.com/bscott/sn-theme-vscode
thumbnail_url: https://raw.githubusercontent.com/bscottl/sn-theme-vscode/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'
...

View File

@ -0,0 +1,2 @@
pyyaml>=5.1.1
requests>=2.22.0