Compare commits

..

75 Commits

Author SHA1 Message Date
01efeab13f update CI config
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
ci/woodpecker/push/publish-docs Pipeline was successful
2024-11-20 00:21:50 -06:00
9a663f4260 update docs
All checks were successful
ci/woodpecker/push/publish-docs Pipeline was successful
2024-11-20 00:19:40 -06:00
7c635c36e0 update docs 2024-11-20 00:18:15 -06:00
fff33849da update docs and CI config
All checks were successful
ci/woodpecker/push/publish-docs Pipeline was successful
2024-11-20 00:13:20 -06:00
3391ffa4e6 Revert "update docs and CI config"
This reverts commit b7d1be495e.
2024-11-20 00:10:29 -06:00
b7d1be495e update docs and CI config 2024-11-20 00:08:16 -06:00
2daf2f130d update docs
All checks were successful
ci/woodpecker/push/publish-docs Pipeline was successful
2024-11-20 00:00:14 -06:00
d120c2ca8f update changelog and add link in docs
All checks were successful
ci/woodpecker/push/publish-docs Pipeline was successful
2024-11-19 23:56:09 -06:00
02fd04930d update CI config
All checks were successful
ci/woodpecker/push/publish-docs Pipeline was successful
2024-11-19 23:52:14 -06:00
10b0abe707 update CI config 2024-11-19 23:49:00 -06:00
291a954e9c update CI config
Some checks failed
ci/woodpecker/tag/go-lint Pipeline failed
ci/woodpecker/push/go-lint Pipeline failed
ci/woodpecker/tag/gitea Pipeline was successful
ci/woodpecker/release/go-lint Pipeline failed
2024-11-19 23:30:33 -06:00
e43eecf383 update CI config
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
ci/woodpecker/tag/gitea Pipeline failed
ci/woodpecker/tag/go-lint Pipeline failed
2024-11-19 23:22:00 -06:00
ea676fe0da add version to CI configs
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
ci/woodpecker/tag/gitea Pipeline failed
ci/woodpecker/tag/go-lint Pipeline failed
2024-11-19 23:08:34 -06:00
e73bd9ff3b update docs
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
ci/woodpecker/tag/gitea Pipeline failed
ci/woodpecker/tag/go-lint Pipeline failed
2024-11-19 22:49:11 -06:00
fd9426181f update changelog 2024-11-19 20:22:20 -06:00
c25edc5d78 add changelog 2024-11-19 20:19:48 -06:00
aebfbda64e add changelog 2024-11-19 20:19:38 -06:00
5fe0629b0f update version and docs 2024-11-19 20:17:03 -06:00
7d6acd77b5 update version 2024-11-19 14:25:00 -06:00
9d646297c7 fix: check for nil Command.Hooks in ExecuteHooks [#12] 2024-11-15 10:46:27 -06:00
bf8d261cf3 added timeout to golangci-lint command 2024-11-14 21:18:14 -06:00
686cd0019a Added Changie files 2024-11-14 21:13:40 -06:00
b7b002bd72 Added: Hooks for Commands.[name]: error, success, and final. Closes [#12]
Added Command.generateLogger() method.

Fixed: make command logger be used for errors, not just when running the command.
2024-11-14 21:10:49 -06:00
b8a63f39f5 add working command hooks
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
2024-11-11 22:44:28 -06:00
feacb83274 new commands.[name].type: script; update templates
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
2024-10-15 08:49:23 -05:00
2aeb435167 new commands.[name].type: script; update templates 2024-10-15 08:49:13 -05:00
51f5084dd0 more work on env variable parsing 2024-09-13 20:47:59 -05:00
cf04e4456a run go mod tidy 2024-09-03 16:25:12 -05:00
25dc6225b3 [CI SKIP] add change files 2024-08-28 21:52:23 -05:00
a300f696d3 add list config file and relevant config in main config file. other minor changes
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
2024-08-28 15:06:25 -05:00
8161aaa0a9 fix CI config
Some checks failed
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/go-lint Pipeline failed
2023-09-09 10:03:17 -05:00
a6bfabe22f v0.4.0
Some checks failed
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/go-lint Pipeline failed
2023-09-09 10:00:55 -05:00
a5466fc121 v0.4.0
Some checks failed
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/go-lint Pipeline failed
2023-09-09 10:00:00 -05:00
fbf2d9cbbc v0.4.0
Some checks failed
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/go-lint Pipeline failed
2023-09-09 01:11:05 -05:00
437642608b v0.4.0
Some checks failed
ci/woodpecker/push/gitea Pipeline is pending
ci/woodpecker/push/go-lint Pipeline is running
ci/woodpecker/tag/gitea Pipeline was successful
ci/woodpecker/tag/go-lint Pipeline failed
ci/woodpecker/tag/publish-docs Pipeline was successful
2023-09-09 00:21:42 -05:00
a4214b2b3f v0.4.0
Some checks failed
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/go-lint Pipeline failed
ci/woodpecker/tag/gitea Pipeline failed
ci/woodpecker/tag/go-lint Pipeline failed
ci/woodpecker/tag/publish-docs Pipeline is running
ci/woodpecker/push/publish-docs Pipeline was successful
2023-09-08 23:42:13 -05:00
6ccb75f4fa added scriptEnvFile to command.commandName object
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
2023-08-06 22:27:51 -05:00
b8a82b2836 update mongo methods
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
2023-07-29 21:23:31 -05:00
78428a49fc update Go Deps, change log size to 50 MBs, clarify messages 2023-07-29 21:20:53 -05:00
42bc11bf1a remove files
Some checks are pending
ci/woodpecker/push/go-lint Pipeline is pending
2023-07-22 01:12:29 -05:00
44e3d534f6 update CI configs
Some checks failed
ci/woodpecker/push/go-lint Pipeline failed
2023-07-21 22:49:23 -05:00
1fbe3282c8 add golangci-lint CI config
Some checks failed
ci/woodpecker/push/gitea unknown status
ci/woodpecker/push/publish-docs unknown status
ci/woodpecker/push/go-lint Pipeline failed
2023-07-21 20:42:14 -05:00
10a6342233 update error message 2023-07-21 20:29:07 -05:00
a35db2e05d make remote commands run and not fail if an SSH session failed to be created
All checks were successful
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/publish-docs Pipeline was successful
ci/woodpecker/tag/gitea Pipeline was successful
ci/woodpecker/tag/publish-docs Pipeline was successful
2023-07-20 21:22:03 -05:00
7c4868ee4b Revert "Revert "make remote commands run and not fail if an SSH session failed to be created""
This reverts commit affdd0abfd.
2023-07-20 21:21:40 -05:00
affdd0abfd Revert "make remote commands run and not fail if an SSH session failed to be created"
This reverts commit 7224661c71.
2023-07-20 21:20:54 -05:00
7224661c71 make remote commands run and not fail if an SSH session failed to be created 2023-07-20 21:20:16 -05:00
e353ed0225 update docs
All checks were successful
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/publish-docs Pipeline was successful
2023-07-02 05:32:33 -05:00
37bd69b675 update CI configs
All checks were successful
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/publish-docs Pipeline was successful
ci/woodpecker/tag/gitea Pipeline was successful
ci/woodpecker/tag/publish-docs Pipeline was successful
2023-07-01 23:07:31 -05:00
14bca64657 update CI configs
Some checks failed
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/publish-docs Pipeline was successful
ci/woodpecker/tag/gitea Pipeline failed
ci/woodpecker/tag/publish-docs Pipeline was successful
2023-07-01 22:49:34 -05:00
d9baf44199 update repo URLs
Some checks failed
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/publish-docs Pipeline was successful
ci/woodpecker/tag/gitea Pipeline failed
ci/woodpecker/tag/publish-docs Pipeline was successful
2023-07-01 22:35:22 -05:00
6de94d038f update CI configs
All checks were successful
ci/woodpecker/push/gitea Pipeline was successful
ci/woodpecker/push/publish-docs Pipeline was successful
2023-07-01 22:31:13 -05:00
a04d1db077 update CI configs 2023-07-01 22:18:36 -05:00
62942540b5 update CI configs 2023-07-01 22:10:19 -05:00
904a579994 fix version subcommand 2023-07-01 22:02:32 -05:00
4b382bddd9 v0.3.0
* Getting environment variables and passwords from Vault (not tested
yet)
* Vault configuration to config (not tested yet)
* Ability to run scripts from file on local machine on the remote host
* Ability to get ouput in the notification of a list for individual
commands or all commands
* Make SSH connections close after all commands have been run; reuse
previous connections if needed
2023-07-01 21:46:54 -05:00
5e7c52997c added getting ENV vars from Vault 2023-05-12 00:42:14 -05:00
f7676e73ba Make host connections close last 2023-03-13 20:25:27 -05:00
2ca5f193e4 Close host connections after all command have been run, added some flags to version subcommand 2023-03-10 16:01:02 -06:00
9ffa2e473e update readme [CI SKIP] 2023-02-19 22:13:43 -06:00
9fd60b6bf7 fix for GitHub Actions 2023-02-18 23:32:26 -06:00
951bf97eb2 fix for CI scripts 2023-02-18 22:52:10 -06:00
a2a89011fe fix for release 2023-02-18 22:49:05 -06:00
d893a2684e fix for CI scripts 2023-02-18 22:48:15 -06:00
ee83586072 Version 0.2.4
* Notifications now display errors and the output of the failed command.
* CI configs for GitHub and Woodpecker
* Added `version` subcommand
* Console logging can be disabled by setting `console-disabled` in the
`logging` object
* If Host was not defined for an incomplete `hosts` object, any commands
would fail as they could not look up the values in the SSH config files.
2023-02-18 22:42:15 -06:00
02321870b5 fix for remote host ports 2023-02-12 08:48:46 -06:00
3e9138e05a fix for remote host ports 2023-02-12 08:29:55 -06:00
51f9e9a776 Merge branch 'develop' 2023-02-11 23:52:00 -06:00
37c20aaafa added new features
- expanding `environment` vars in cmd section
- support for connecting to one proxy/bastion host
- better notification text layout
- better error message on private key failing to open
2023-02-11 23:50:19 -06:00
9c202cf3e9 Merge branch 'develop' 2023-02-02 11:28:35 -06:00
c3fa74e442 fix for remote host ports 2023-02-02 11:24:01 -06:00
0f3cf0d9c4 changed .goreleaser.yaml 2023-02-02 00:15:53 -06:00
059f4c0097 added some features
- Added `cron` command to run lists with `cron` time specifed
- Changed `-c` flag to `-f` flag for passing config file
- Modified some config keys
  - cmdArgs -> Args
  - Got rid of `hosts.config`
- better SSH handling
  - respects values in config file
2023-02-01 23:54:48 -06:00
03f54c8714 Added command and list execution (#1), small touchups
- Added exec command to execute individual commands
- Added --lists, -l flag to backup command
  - Run command lists (#1)
- Small touchups and documentation
2023-01-20 02:42:52 -06:00
37c57f6438 added release 2023-01-18 01:48:39 -06:00
859 changed files with 86718 additions and 1312 deletions

9
.changes/0.2.4.md Normal file
View File

@ -0,0 +1,9 @@
## 0.2.4 - 2023-02-18
### Added
* Notifications now display errors and the output of the failed command.
* CI configs for GitHub and Woodpecker
* Added `version` subcommand
### Changed
* Console logging can be disabled by setting `console-disabled` in the `logging` object
## Fixed
* If Host was not defined for an incomplete `hosts` object, any commands would fail as they could not look up the values in the SSH config files.

6
.changes/header.tpl.md Normal file
View File

@ -0,0 +1,6 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).

View File

8
.changes/v0.3.0.md Normal file
View File

@ -0,0 +1,8 @@
## v0.3.0 - 2023-01-07
### Added
* Getting environment variables and passwords from Vault (not tested yet)
* Vault configuration to config (not tested yet)
* Ability to run scripts from file on local machine on the remote host
* Ability to get ouput in the notification of a list for individual commands or all commands
### Changed
* Make SSH connections close after all commands have been run; reuse previous connections if needed

3
.changes/v0.3.1.md Normal file
View File

@ -0,0 +1,3 @@
## v0.3.1 - 2023-07-20
### Changed
* If an SSH session failed to be created, the command would fail. This would be caused when restarting the SSH host. The SSH connection is attempted to be created again. If successful, the command is executed normally.

13
.changes/v0.4.0.md Normal file
View File

@ -0,0 +1,13 @@
## v0.4.0 - 2023-09-08
### Added
* Added `scriptEnvFile` to command object that allows one to specify an environment file (or any file really) when a `scriptFile` is run. Inspired by the practice of keeping environment variables and scripts or commands seperate.
* Basis for listing commands
### Changed
* BREAKING: Notifications object now takes the form of service.id, where service can be "mail" or "matrix" and id is a unique id for the service.
* BREAKING: Since the change to the notifications object, cmd-lists' inner map key 'notifications' must be of the form service.id. id must be defined for that service. See notifications docs for aviliable services.
* Config parser is now the simpler Koanf - Keys are now case-sensitive
* Log size limited to 50 Mb

9
.changes/v0.5.0.md Normal file
View File

@ -0,0 +1,9 @@
## v0.5.0 - 2024-11-19
### Added
* Lists can now go in a file. See docs for more information.
* commands.[name].type: script now opens `scriptEnvFile`.
* Hooks for Commands.[name]. Error, success, and final. [#12]
### Changed
* GetKnownHosts is now a method of Host
### Fixed
* make command logger be used for errors, not just when running the command

26
.changie.yaml Normal file
View File

@ -0,0 +1,26 @@
changesDir: .changes
unreleasedDir: unreleased
headerPath: header.tpl.md
changelogPath: CHANGELOG.md
versionExt: md
versionFormat: '## {{.Version}} - {{.Time.Format "2006-01-02"}}'
kindFormat: '### {{.Kind}}'
changeFormat: '* {{.Body}}'
kinds:
- label: Added
auto: minor
- label: Changed
auto: major
- label: Deprecated
auto: minor
- label: Removed
auto: major
- label: Fixed
auto: patch
- label: Security
auto: patch
newlines:
afterChangelogHeader: 1
beforeChangelogVersion: 1
endOfVersion: 1
envPrefix: CHANGIE_

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

40
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: goreleaser
on:
push:
# run only against tags
tags:
- '*'
permissions:
contents: write
packages: write
# issues: write
jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- run: git fetch --force --tags
- uses: actions/setup-go@v4
with:
go-version: '1.20'
cache: true
# More assembly might be required: Docker logins, GPG, etc. It all depends
# on your needs.
- name: Get tag
id: tag
uses: dawidd6/action-get-tag@v1
with:
# Optionally strip `v` prefix
strip_v: false
- uses: goreleaser/goreleaser-action@v4
with:
distribution: goreleaser
version: latest
args: release --release-notes=".changes/${{steps.tag.outputs.tag}}.md" -f .goreleaser/github.yml --clean
env:
GITHUB_TOKEN: ${{ secrets.GORELEASER_TOKEN }}

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "docs/themes/hugo-theme-relearn"]
path = docs/themes/hugo-theme-relearn
url = https://github.com/McShelby/hugo-theme-relearn

44
.goreleaser/gitea.yml Normal file
View File

@ -0,0 +1,44 @@
version: 2
before:
hooks:
# You may remove this if you don't use go modules.
- go mod tidy
builds:
- env:
- CGO_ENABLED=0
- GOPROXY=https://goproxy.io
goos:
- freebsd
- linux
goarch:
- "386"
- amd64
- arm64
archives:
- format: tar.gz
# this name template makes the OS and Arch compatible with the results of uname.
name_template: >-
{{ .ProjectName }}_{{ .Version }}_
{{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386
{{- else }}{{ .Arch }}{{ end }}
{{- if .Arm }}v{{ .Arm }}{{ end }}
# use zip for windows archives
format_overrides:
- goos: windows
format: zip
checksum:
name_template: 'checksums.txt'
snapshot:
version_template: "{{ incpatch .Version }}-next"
changelog:
disable: false
gitea_urls:
api: https://git.andrewnw.xyz/api/v1
download: https://git.andrewnw.xyz
# The lines beneath this are called `modelines`. See `:help modeline`
# Feel free to remove those if you don't want/use them.
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json

42
.goreleaser/github.yml Normal file
View File

@ -0,0 +1,42 @@
# This is an example .goreleaser.yml file with some sensible defaults.
# Make sure to check the documentation at https://goreleaser.com
version: 2
before:
hooks:
# You may remove this if you don't use go modules.
- go mod tidy
builds:
- env:
- CGO_ENABLED=0
goos:
- freebsd
- linux
goarch:
- "386"
- amd64
- arm64
archives:
- format: tar.gz
# this name template makes the OS and Arch compatible with the results of uname.
name_template: >-
{{ .ProjectName }}_{{ .Version }}_
{{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386
{{- else }}{{ .Arch }}{{ end }}
{{- if .Arm }}v{{ .Arm }}{{ end }}
# use zip for windows archives
format_overrides:
- goos: windows
format: zip
checksum:
name_template: 'checksums.txt'
snapshot:
version_template: "{{ incpatch .Version }}-next"
changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'

View File

@ -1,5 +1,3 @@
# This is an example .goreleaser.yml file with some sensible defaults.
# Make sure to check the documentation at https://goreleaser.com
before: before:
hooks: hooks:
# You may remove this if you don't use go modules. # You may remove this if you don't use go modules.
@ -8,13 +6,18 @@ builds:
- env: - env:
- CGO_ENABLED=0 - CGO_ENABLED=0
goos: goos:
- freebsd
- linux - linux
goarch:
- "386"
- amd64
- arm64
archives: archives:
- format: tar.gz - format: binary
# this name template makes the OS and Arch compatible with the results of uname. # this name template makes the OS and Arch compatible with the results of uname.
name_template: >- name_template: >-
{{ .ProjectName }}_ {{ .ProjectName }}_{{ .Version }}_
{{- title .Os }}_ {{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64 {{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386 {{- else if eq .Arch "386" }}i386
@ -36,8 +39,8 @@ changelog:
- '^test:' - '^test:'
gitea_urls: gitea_urls:
api: https://git.andrewnw.xyz/api/v1 api: https://git.vern.cc/api/v1
download: https://git.andrewnw.xyz download: https://git.vern.cc
# The lines beneath this are called `modelines`. See `:help modeline` # The lines beneath this are called `modelines`. See `:help modeline`
# Feel free to remove those if you don't want/use them. # Feel free to remove those if you don't want/use them.
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json # yaml-language-server: $schema=https://goreleaser.com/static/schema.json

View File

@ -1,5 +1,12 @@
{ {
"cSpell.words": [ "cSpell.words": [
"Cmds" "Cmds",
"knadh",
"koanf",
"mattn",
"maunium",
"mautrix",
"nikoksr",
"Strs"
] ]
} }

12
.woodpecker/gitea.yml Normal file
View File

@ -0,0 +1,12 @@
steps:
release:
image: goreleaser/goreleaser
commands:
- goreleaser release -f .goreleaser/gitea.yml --release-notes=".changes/$(go run backy.go version -V).md"
secrets: [ gitea_token ]
when:
event: tag
when:
- event: tag
branch: master

14
.woodpecker/go-lint.yml Normal file
View File

@ -0,0 +1,14 @@
steps:
build:
image: golang
commands:
- go build
- go test
release:
image: golangci/golangci-lint:v1.53.3
commands:
- golangci-lint run -v --timeout 5m
when:
- event: push
branch: develop

View File

@ -0,0 +1,33 @@
steps:
build:
image: klakegg/hugo:ext-debian-ci
commands:
- git submodule foreach 'git fetch origin; git checkout $(git describe --tags `git rev-list --tags --max-count=1`);'
- cd docs
- hugo
when:
- event: push
branch: master
path: "docs/*"
deploy:
image: codingkoopa/git-rsync-openssh
commands:
- cd docs
- echo "nameserver 1.1.1.1" > /etc/resolv.conf
- mkdir ~/.ssh && chmod -R 700 ~/.ssh
# - apt update -y && apt install openssh-client rsync -y
- echo "$SSH_HOST_KEY" > ~/.ssh/known_hosts
- echo -e '#!/bin/sh\necho "$SSH_PASSPHRASE"' | tr -d '\r' > ~/.ssh/.print_ssh_password
# - cat ~/.ssh/.print_ssh_password
- chmod 700 ~/.ssh/.print_ssh_password
- eval $(ssh-agent -s)
- echo "$SSH_DEPLOY_KEY" | tr -d '\r' | DISPLAY=":0.0" SSH_ASKPASS=~/.ssh/.print_ssh_password setsid ssh-add -
- rsync -atv --delete --progress public/ backy@backy.cybershell.xyz:docs
- rsync -atv --delete --progress vangen/ backy@backy.cybershell.xyz:vangen-go
secrets: [ ssh_host_key, ssh_deploy_key, ssh_passphrase ]
when:
- event: push
branch: master
path: "docs/*"

54
CHANGELOG.md Normal file
View File

@ -0,0 +1,54 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).
## v0.5.0 - 2024-11-19
### Added
* Lists can now go in a file. See docs for more information.
* commands.[name].type: script now opens `scriptEnvFile`.
* Hooks for Commands.[name]. Error, success, and final. [#12]
### Changed
* GetKnownHosts is now a method of Host
### Fixed
* make command logger be used for errors, not just when running the command
## v0.4.0 - 2023-09-08
### Added
* Added `scriptEnvFile` to command object that allows one to specify an environment file (or any file really) when a `scriptFile` is run. Inspired by the practice of keeping environment variables and scripts or commands seperate.
* Basis for listing commands
### Changed
* BREAKING: Notifications object now takes the form of service.id, where service can be "mail" or "matrix" and id is a unique id for the service.
* BREAKING: Since the change to the notifications object, cmd-lists' inner map key 'notifications' must be of the form service.id. id must be defined for that service. See notifications docs for aviliable services.
* Config parser is now the simpler Koanf - Keys are now case-sensitive
* Log size limited to 50 Mb
## v0.3.1 - 2023-07-20
### Changed
* If an SSH session failed to be created, the command would fail. This would be caused when restarting the SSH host. The SSH connection is attempted to be created again. If successful, the command is executed normally.
## v0.3.0 - 2023-01-07
### Added
* Getting environment variables and passwords from Vault (not tested yet)
* Vault configuration to config (not tested yet)
* Ability to run scripts from file on local machine on the remote host
* Ability to get ouput in the notification of a list for individual commands or all commands
### Changed
* Make SSH connections close after all commands have been run; reuse previous connections if needed
## 0.2.4 - 2023-02-18
### Added
* Notifications now display errors and the output of the failed command.
* CI configs for GitHub and Woodpecker
* Added `version` subcommand
### Changed
* Console logging can be disabled by setting `console-disabled` in the `logging` object
## Fixed
* If Host was not defined for an incomplete `hosts` object, any commands would fail as they could not look up the values in the SSH config files.

View File

@ -1,5 +0,0 @@
build:
go build
gorealeaser-build:
goreleaser release --snapshot --rm-dist

View File

@ -1,3 +0,0 @@
# Plan
Find auth method, possibly using another package

100
README.md
View File

@ -1,100 +1,22 @@
# Backy - an application to manage backups # Backy - an application to manage backups
This app is in development, and is currently not stable. Expect core functionality to possiblly break. See the [install documentation](https://backy.cybershell.xyz/getting-started/install/index.html)
## Installing ## Security
To install: The latest version is currently the only supported version.
`go install git.andrewnw.xyz/CyberShell/backy@master` ## Features
This assumes you already have a working Go environment, if not please see [this page](https://golang.org/doc/install) first. - Allows easy configuration of executable commands
To run a config: - Allows for commands to be run on many hosts over SSH
`backy backup` - Commands can be grouped in list to run in specific order
Or to use a specific file: - Notifications on completion and failure
```backy backup -c /path/to/file```
If you leave the config path blank, the following paths will be searched in order: - Run in cron mode
- `./backy.yaml` - For any command, especially backup commands
- `~/.config/backy.yaml`
Create a file at `~/.config/backy.yaml`:
```yaml
commands:
stop-docker-container:
cmd: docker
cmdArgs:
- compose
- -f /some/path/to/docker-compose.yaml
- down
# if host is not defined,
host: some-host
env: ~/path/to/env/file
backup-docker-container-script:
cmd: /path/to/script
host: some-host
env: ~/path/to/env/file
shell-cmd:
cmd: rsync
shell: bash
cmdArgs:
- -av some-host:/path/to/data ~/Docker/Backups/docker-data
hostname:
cmd: hostname
cmd-configs:
# this can be any name you want
cmds-to-run:
# all commands have to be defined
order:
- stop-docker-container
- backup-docker-container-script
- shell-cmd
- hostname
notifications:
- matrix
hostname:
order:
- hostname
notifications:
- prod-email
hosts:
some-host:
config:
usefile: true
user: root
private-key-path:
logging:
verbose: true
file: /path/to/logs/commands.log
notifications:
prod-email:
id: prod-email
type: mail
host: yourhost.tld
port: 587
senderAddress: email@domain.tld
to:
- admin@domain.tld
username: smtp-username@domain.tld
password: your-password-here
matrix:
id: matrix
type: matrix
homeserver: your-home-server.tld
room-id: room-id
access-token: your-access-token
user-id: your-user-id
```
Note, let me know if a path lookup fails due to using Go's STDLib `os`

1
cmd/.gitignore vendored
View File

@ -1 +1,2 @@
*.yaml *.yaml
*.yml

View File

@ -1,32 +1,43 @@
// backup.go
// Copyright (C) Andrew Woodlee 2023
// License: Apache-2.0
package cmd package cmd
import ( import (
"git.andrewnw.xyz/CyberShell/backy/pkg/backy" "git.andrewnw.xyz/CyberShell/backy/pkg/backy"
"git.andrewnw.xyz/CyberShell/backy/pkg/notifications"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var ( var (
backupCmd = &cobra.Command{ backupCmd = &cobra.Command{
Use: "backup [--commands==list1,list2]", Use: "backup [--lists=list1,list2,... | -l list1, list2,...]",
Short: "Runs commands defined in config file.", Short: "Runs commands defined in config file.",
Long: `Backup executes commands defined in config file, Long: "Backup executes commands defined in config file.\nUse the --lists or -l flag to execute the specified lists. If not flag is not given, all lists will be executed.",
use the -cmds flag to execute the specified commands.`,
Run: Backup, Run: Backup,
} }
) )
var CmdList []string
// Holds command list to run
var cmdLists []string
func init() { func init() {
// cobra.OnInitialize(initConfig)
backupCmd.Flags().StringSliceVar(&CmdList, "cmds", nil, "Accepts a comma-separated list of command lists to execute.") backupCmd.Flags().StringSliceVarP(&cmdLists, "lists", "l", nil, "Accepts comma-separated names of command lists to execute.")
} }
func Backup(cmd *cobra.Command, args []string) { func Backup(cmd *cobra.Command, args []string) {
config := backy.ReadAndParseConfigFile(cfgFile) backyConfOpts := backy.NewOpts(cfgFile, backy.AddCommandLists(cmdLists))
notifications.SetupNotify(*config) backyConfOpts.InitConfig()
config.RunBackyConfig()
backy.ReadConfig(backyConfOpts)
backyConfOpts.RunListConfig("")
for _, host := range backyConfOpts.Hosts {
if host.SshClient != nil {
host.SshClient.Close()
}
}
} }

31
cmd/config.go Normal file
View File

@ -0,0 +1,31 @@
package cmd
// import (
// "git.andrewnw.xyz/CyberShell/backy/pkg/backy"
// "github.com/spf13/cobra"
// )
// var (
// configCmd = &cobra.Command{
// Use: "config list ...",
// Short: "Runs commands defined in config file.",
// Long: `Cron executes commands at the time defined in config file.`,
// Run: config,
// }
// cmds []string
// lists []string
// )
// func config(cmd *cobra.Command, args []string) {
// opts := backy.NewOpts(cfgFile, backy.cronEnabled())
// opts.InitConfig()
// }
// func init() {
// configCmd.PersistentFlags().StringArrayVarP(&cmds, "cmds", "c", nil, "Accepts comma-seperated list of commands to list")
// }

24
cmd/cron.go Normal file
View File

@ -0,0 +1,24 @@
package cmd
import (
"git.andrewnw.xyz/CyberShell/backy/pkg/backy"
"github.com/spf13/cobra"
)
var (
cronCmd = &cobra.Command{
Use: "cron [flags]",
Short: "Starts a scheduler that runs lists defined in config file.",
Long: `Cron starts a scheduler that executes command lists at the time defined in config file.`,
Run: cron,
}
)
func cron(cmd *cobra.Command, args []string) {
opts := backy.NewOpts(cfgFile, backy.CronEnabled())
opts.InitConfig()
backy.ReadConfig(opts)
opts.Cron()
}

33
cmd/exec.go Normal file
View File

@ -0,0 +1,33 @@
// exec.go
// Copyright (C) Andrew Woodlee 2023
// License: Apache-2.0
package cmd
import (
"git.andrewnw.xyz/CyberShell/backy/pkg/backy"
"git.andrewnw.xyz/CyberShell/backy/pkg/logging"
"github.com/spf13/cobra"
)
var (
execCmd = &cobra.Command{
Use: "exec command ...",
Short: "Runs commands defined in config file in order given.",
Long: `Exec executes commands defined in config file in order given.`,
Run: execute,
}
)
func execute(cmd *cobra.Command, args []string) {
if len(args) < 1 {
logging.ExitWithMSG("Please provide a command to run. Pass --help to see options.", 1, nil)
}
opts := backy.NewOpts(cfgFile, backy.AddCommands(args))
opts.InitConfig()
// opts.InitMongo()
backy.ReadConfig(opts).ExecuteCmds(opts)
}

49
cmd/list.go Normal file
View File

@ -0,0 +1,49 @@
// backup.go
// Copyright (C) Andrew Woodlee 2023
// License: Apache-2.0
package cmd
import (
"git.andrewnw.xyz/CyberShell/backy/pkg/backy"
"github.com/spf13/cobra"
)
var (
listCmd = &cobra.Command{
Use: "list [--list=list1,list2,... | -l list1, list2,...] [ -cmd cmd1 cmd2 cmd3...]",
Short: "Lists commands, lists, or hosts defined in config file.",
Long: "Backup lists commands or groups defined in config file.\nUse the --lists or -l flag to list the specified lists. If not flag is not given, all lists will be executed.",
Run: List,
}
)
var listsToList []string
var cmdsToList []string
func init() {
listCmd.Flags().StringSliceVarP(&listsToList, "lists", "l", nil, "Accepts comma-separated names of command lists to list.")
listCmd.Flags().StringSliceVarP(&cmdsToList, "cmds", "c", nil, "Accepts comma-separated names of commands to list.")
}
func List(cmd *cobra.Command, args []string) {
// settup based on whats passed in:
// - cmds
// - lists
// - if none, list all commands
if cmdLists != nil {
}
opts := backy.NewOpts(cfgFile)
opts.InitConfig()
opts = backy.ReadConfig(opts)
opts.ListCommand("rm-sn-db")
}

View File

@ -7,11 +7,8 @@ package cmd
import ( import (
"fmt" "fmt"
"os" "os"
"path"
"strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/viper"
) )
var ( var (
@ -35,34 +32,9 @@ func Execute() {
} }
func init() { func init() {
cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file to read from") rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "f", "", "config file to read from")
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Sets verbose level") rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Sets verbose level")
rootCmd.AddCommand(backupCmd) rootCmd.AddCommand(backupCmd, execCmd, cronCmd, versionCmd, listCmd)
}
func initConfig() {
backyConfig := viper.New()
if cfgFile != strings.TrimSpace("") {
// Use config file from the flag.
backyConfig.SetConfigFile(cfgFile)
} else {
// Find home directory.
home, err := os.UserHomeDir()
cobra.CheckErr(err)
configPath := path.Join(home, ".config", "backy")
// Search config in config directory with name "backy" (without extension).
backyConfig.AddConfigPath(configPath)
backyConfig.SetConfigType("yaml")
backyConfig.SetConfigName("backy")
}
backyConfig.AutomaticEnv()
if err := backyConfig.ReadInConfig(); err == nil {
// fmt.Println("Using config file:", backyConfig.ConfigFileUsed())
}
} }

39
cmd/version.go Normal file
View File

@ -0,0 +1,39 @@
package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
)
const versionStr = "0.5.0"
var (
versionCmd = &cobra.Command{
Use: "version [flags]",
Short: "Prints the version and exits",
Long: "Prints the version and exits. No arguments just prints the version number only.",
Run: version,
}
numOnly bool
vPre bool
)
func init() {
versionCmd.PersistentFlags().BoolVarP(&numOnly, "num", "n", false, "Output the version number only.")
versionCmd.PersistentFlags().BoolVarP(&vPre, "vpre", "V", false, "Output the version with v prefixed.")
}
func version(cmd *cobra.Command, args []string) {
if numOnly && !vPre {
fmt.Printf("%s\n", versionStr)
} else if vPre && !numOnly {
fmt.Printf("v%s\n", versionStr)
} else {
fmt.Printf("Backy version: %s\n", versionStr)
}
os.Exit(0)
}

2
docs/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
public/
resources/_gen

0
docs/.hugo_build.lock Normal file
View File

View File

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

90
docs/config.toml Normal file
View File

@ -0,0 +1,90 @@
baseURL = 'http://example.org/'
languageCode = 'en-us'
title = 'A tool for commands'
# Change the default theme to be use when building the site with Hugo
theme = "hugo-theme-relearn"
# For search functionality
[outputs]
home = [ "HTML", "RSS", "SEARCH"]
[params]
# This controls whether submenus will be expanded (true), or collapsed (false) in the
# menu; if no setting is given, the first menu level is set to false, all others to true;
# this can be overridden in the pages frontmatter
alwaysopen = false
# Prefix URL to edit current page. Will display an "Edit" button on top right hand corner of every page.
# Useful to give opportunity to people to create merge request for your doc.
# See the config.toml file from this documentation site to have an example.
editURL = ""
# Author of the site, will be used in meta information
author = ""
# Description of the site, will be used in meta information
description = ""
# Shows a checkmark for visited pages on the menu
showVisitedLinks = false
# Disable search function. It will hide search bar
disableSearch = false
# Disable search in hidden pages, otherwise they will be shown in search box
disableSearchHiddenPages = false
# Disables hidden pages from showing up in the sitemap and on Google (et all), otherwise they may be indexed by search engines
disableSeoHiddenPages = false
# Disables hidden pages from showing up on the tags page although the tag term will be displayed even if all pages are hidden
disableTagHiddenPages = false
# Javascript and CSS cache are automatically busted when new version of site is generated.
# Set this to true to disable this behavior (some proxies don't handle well this optimization)
disableAssetsBusting = false
# Set this to true if you want to disable generation for generator version meta tags of hugo and the theme;
# don't forget to also set Hugo's disableHugoGeneratorInject=true, otherwise it will generate a meta tag into your home page
disableGeneratorVersion = false
# Set this to true to disable copy-to-clipboard button for inline code.
disableInlineCopyToClipBoard = false
# A title for shortcuts in menu is set by default. Set this to true to disable it.
disableShortcutsTitle = false
# If set to false, a Home button will appear below the search bar on the menu.
# It is redirecting to the landing page of the current language if specified. (Default is "/")
disableLandingPageButton = true
# When using mulitlingual website, disable the switch language button.
disableLanguageSwitchingButton = false
# Hide breadcrumbs in the header and only show the current page title
disableBreadcrumb = true
# If set to true, hide table of contents menu in the header of all pages
disableToc = false
# If set to false, load the MathJax module on every page regardless if a MathJax shortcode is present
disableMathJax = false
# Specifies the remote location of the MathJax js
customMathJaxURL = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"
# Initialization parameter for MathJax, see MathJax documentation
mathJaxInitialize = "{}"
# If set to false, load the Mermaid module on every page regardless if a Mermaid shortcode or Mermaid codefence is present
disableMermaid = false
# Specifies the remote location of the Mermaid js
customMermaidURL = "https://unpkg.com/mermaid/dist/mermaid.min.js"
# Initialization parameter for Mermaid, see Mermaid documentation
mermaidInitialize = "{ \"theme\": \"default\" }"
# If set to false, load the Swagger module on every page regardless if a Swagger shortcode is present
disableSwagger = false
# Specifies the remote location of the RapiDoc js
customSwaggerURL = "https://unpkg.com/rapidoc/dist/rapidoc-min.js"
# Initialization parameter for Swagger, see RapiDoc documentation
swaggerInitialize = "{ \"theme\": \"light\" }"
# Hide Next and Previous page buttons normally displayed full height beside content
disableNextPrev = true
# Order sections in menu by "weight" or "title". Default to "weight";
# this can be overridden in the pages frontmatter
ordersectionsby = "weight"
# Change default color scheme with a variant one. Eg. can be "auto", "red", "blue", "green" or an array like [ "blue", "green" ].
themeVariant = "auto"
# Change the title separator. Default to "::".
titleSeparator = "-"
# If set to true, the menu in the sidebar will be displayed in a collapsible tree view. Although the functionality works with old browsers (IE11), the display of the expander icons is limited to modern browsers
collapsibleMenu = true
# If a single page can contain content in multiple languages, add those here
additionalContentLanguage = [ "en" ]
# If set to true, no index.html will be appended to prettyURLs; this will cause pages not
# to be servable from the file system
disableExplicitIndexURLs = false
# For external links you can define how they are opened in your browser; this setting will only be applied to the content area but not the shortcut menu
externalLinkTarget = "_blank"

28
docs/content/_index.md Normal file
View File

@ -0,0 +1,28 @@
+++
archetype = "home"
title = "Backy"
+++
Backy is a tool for automating data backup and remote command execution. It can work over SSH, and provides completion and failure notifications, error reporting, and more.
Why the name Backy? Because I wanted an app for backups.
View the [changelog here](https://git.andrewnw.xyz/CyberShell/backy/src/branch/master/CHANGELOG.md).
{{% notice tip %}}
Feel free to open a [PR](https://git.andrewnw.xyz/CyberShell/backy/pulls), raise an [issue](https://git.andrewnw.xyz/CyberShell/backy/issues "Open a Gitea Issue")(s), or request new feature(s).
{{% /notice %}}
## Features
- Allows easy configuration of executable commands
- Allows for commands to be run on many hosts over SSH
- Commands can be grouped in list to run in specific order
- Notifications on completion and failure
- Run in cron mode
- For any command, especially backup commands

120
docs/content/cli/_index.md Normal file
View File

@ -0,0 +1,120 @@
---
title: CLI
weight: 4
---
This page lists documentation for the CLI.
## Backy
```
Backy is a command-line application useful for configuring backups, or any commands run in sequence.
Usage:
backy [command]
Available Commands:
backup Runs commands defined in config file.
completion Generate the autocompletion script for the specified shell
cron Starts a scheduler that runs lists defined in config file.
exec Runs commands defined in config file in order given.
help Help about any command
list Lists commands, lists, or hosts defined in config file.
version Prints the version and exits
Flags:
-f, --config string config file to read from
-h, --help help for backy
-v, --verbose Sets verbose level
Use "backy [command] --help" for more information about a command.
```
# Subcommands
## backup
```
Backup executes commands defined in config file.
Use the --lists or -l flag to execute the specified lists. If not flag is not given, all lists will be executed.
Usage:
backy backup [--lists=list1,list2,... | -l list1, list2,...] [flags]
Flags:
-h, --help help for backup
-l, --lists strings Accepts comma-separated names of command lists to execute.
Global Flags:
-f, --config string config file to read from
-v, --verbose Sets verbose level
```
## cron
```
Cron starts a scheduler that executes command lists at the time defined in config file.
Usage:
backy cron [flags]
Flags:
-h, --help help for cron
Global Flags:
-f, --config string config file to read from
-v, --verbose Sets verbose level
```
## exec
```
Exec executes commands defined in config file in order given.
Usage:
backy exec command ... [flags]
Flags:
-h, --help help for exec
Global Flags:
-f, --config string config file to read from
-v, --verbose Sets verbose level
```
## version
```
Prints the version and exits. No arguments just prints the version number only.
Usage:
backy version [flags]
Flags:
-h, --help help for version
-n, --num Output the version number only.
-V, --vpre Output the version with v prefixed.
Global Flags:
-f, --config string config file to read from
-v, --verbose Sets verbose level
```
## list
```
Backup lists commands or groups defined in config file.
Use the --lists or -l flag to list the specified lists. If not flag is not given, all lists will be executed.
Usage:
backy list [--list=list1,list2,... | -l list1, list2,...] [ -cmd cmd1 cmd2 cmd3...] [flags]
Flags:
-c, --cmds strings Accepts comma-separated names of commands to list.
-h, --help help for list
-l, --lists strings Accepts comma-separated names of command lists to list.
Global Flags:
-f, --config string config file to read from
-v, --verbose Sets verbose level
```

View File

@ -0,0 +1,22 @@
---
title: "Configuring Backy"
weight: 3
description: >
This page tells you how to configure Backy.
---
This is the section on the config file.
To use a specific file:
```backy [command] -f /path/to/file```
If you leave the config path blank, the following paths will be searched in order:
1. `./backy.yml`
2. `./backy.yaml`
3. `~/.config/backy.yml`
4. `~/.config/backy.yaml`
Create a file at `~/.config/backy.yml`.
See the rest of the documentation in this section to configure it.

View File

@ -0,0 +1,91 @@
---
title: "Command Lists"
weight: 2
description: >
This page tells you how to get started with Backy.
---
Command lists are for executing commands in sequence and getting notifications from them.
The top-level object key can be anything you want but not the same as another.
Lists can go in a separate file. Command lists should be in a separate file if:
1. key 'cmd-lists.file' is found
2. hosts.yml or hosts.yaml is found in the same directory as the backy config file
```yaml
test2:
name: test2
order:
- test
- test2
notifications:
- mail.prod-email
- matrix.sysadmin
cron: "0 * * * * *"
```
| key | description | type | required
| --- | --- | --- | --- |
| `order` | Defines the sequence of commands to execute | `[]string` | yes |
| `getOutput` | Command(s) output is in the notification(s) | `bool` | no |
| `notifications` | The notification service(s) and ID(s) to use on success and failure. Must be *`service.id`*. See the [notifications documentation page](/config/notifications/) for more | `[]string` | no |
| `name` | Optional name of the list | `string` | no |
| `cron` | Time at which to schedule the list. Only has affect when cron subcommand is run. | `string` | no |
### Order
The order is an array of commands to execute in order. Each command must be defined.
```yaml
order:
- cmd-1
- cmd-2
```
### getOutput
Get command output when a notification is sent.
Is not required. Can be `true` or `false`. Default is `false`.
### Notifications
An array of notification IDs to use on success and failure. Must match any of the `notifications` object map keys.
### Name
Name is optional. If name is not defined, name will be the object's map key.
### Cron mode
Backy also has a cron mode, so one can run `backy cron` and start a process that schedules jobs to run at times defined in the configuration file.
Adding `cron: 0 0 1 * * *` to a `cmd-lists` object will schedule the list at 1 in the morning. See [https://crontab.guru/](https://crontab.guru/) for reference.
{{% notice tip %}}
Note: Backy uses the second field of cron, so add anything except * to the beginning of a regular cron expression.
{{% /notice %}}
```yaml
cmd-lists:
  docker-container-backup: # this can be any name you want
    # all commands have to be defined
    order:
      - stop-docker-container
      - backup-docker-container-script
      - shell-cmd
      - hostname
      - start-docker-container
    notifications:
      - matrix.id
    name: backup-some-container
    cron: "0 0 1 * * *"
  hostname:
    name: hostname
    order:
      - hostname
    notifications:
    - mail.prod-email
```

View File

@ -0,0 +1,146 @@
---
title: "Commands"
weight: 1
---
The yaml top-level map can be any string.
The top-level name must be unique.
### Example Config
```yaml
commands:
stop-docker-container:
cmd: docker
Args:
- compose
- -f /some/path/to/docker-compose.yaml
- down
# if host is not defined, command will be run locally
# The host has to be defined in either the config file or the SSH Config files
host: some-host
hooks
error:
- some-other-command-when-failing
success:
- success-command
final:
- final-command
backup-docker-container-script:
cmd: /path/to/local/script
# script file is input as stdin to SSH
type: scriptFile # also can be script
environment:
- FOO=BAR
- APP=$VAR
```
Values available for this section:
| name | notes | type | required
| --- | --- | --- | --- |
| `cmd` | Defines the command to execute | `string` | yes |
| `args` | Defines the arguments to the command | `[]string` | no |
| `environment` | Defines evironment variables for the command | `[]string` | no |
| `type` | May be `scriptFile` or `script`. Runs script from local machine on remote. Only applicable when `host` is defined. | `string` | no |
| `getOutput` | Command(s) output is in the notification(s) | `bool` | no |
| `host` | If not specified, the command will execute locally. | `string` | no |
| `scriptEnvFile` | When type is `scriptFile`, the script is appended to this file. | `string` | no |
| `shell` | Only applicable when host is not specified | `string` | no |
| `hooks` | Hooks are used at the end of the individual command. Must be another command. | `[]string` | no |
#### cmd
cmd must be a valid command or script to execute.
#### args
args must be arguments to cmd as they would be on the command-line:
```sh
cmd [arg1 arg2 ...]
```
Define them in an array:
```yaml
args:
- arg1
- arg2
- arg3
```
### getOutput
Get command output when a notification is sent.
Is not required. Can be `true` or `false`.
#### host
{{% notice info %}}
If any `host` is not defined or left blank, the command will run on the local machine.
{{% /notice %}}
Host may or may not be defined in the `hosts` section.
{{% notice info %}}
If any `host` from the commands section does not match any object in the `hosts` section, the `Host` is assumed to be this value. This value will be used to search in the default SSH config files.
For example, say that I have a host defined in my SSH config with the `Host` defined as `web-prod`.
If I assign a value to host as `host: web-prod` and don't specify this value in the `hosts` object, web-prod will be used as the `Host` in searching the SSH config files.
{{% /notice %}}
### shell
If shell is defined and host is NOT defined, the command will run in the specified shell.
Make sure to escape any shell input.
### scriptEnvFile
Path to a file.
When type is specified, the script is appended to this file.
This is useful for specifying environment variables or other things so they don't have to be included in the script.
### type
May be `scriptFile` or `script`. Runs script from local machine on remote host passed to the SSH session as standard input.
If `type` is `script`, `cmd` is used as the script.
If `type` is `scriptFile`, cmd must be a script file.
### environment
The environment variables support expansion:
- using escaped values `$VAR` or `${VAR}`
For now, the variables have to be defined in an `.env` file in the same directory as the config file.
If using it with host specified, the SSH server has to be configured to accept those env variables.
If the command is run locally, the OS's environment is added.
### hooks
Hooks are run after the command is run.
Errors are run if the command errors, success if it returns no error. Final hooks are run regardless of error condition.
Values for hooks are as follows:
```yaml
command:
hook:
# these commands are defined elsewhere in the file
error:
- errcommand
success:
- successcommand
final:
- donecommand
```

View File

@ -0,0 +1,74 @@
---
title: "Notifications"
weight: 3
description: >
This page tells you how to get set up Backy notifications.
---
Notifications can be sent on command list completion and failure.
The supported platforms for notifications are email (SMTP) and [Matrix](https://matrix.org/).
Notifications are defined by service, with the current form following below. Ids must come after the service.
```yaml
notifications:
mail:
prod-email:
host: yourhost.tld
port: 587
senderaddress: email@domain.tld
to:
- admin@domain.tld
username: smtp-username@domain.tld
password: your-password-here
matrix:
matrix:
home-server: your-home-server.tld
room-id: room-id
access-token: your-access-token
user-id: your-user-id
```
Sections recognized are `mail` and `matrix`
There must be a section with an id (eg. `mail.test-svr`) following one of these sections.
### mail
| key | description | type
| --- | --- | ---
| `host` | Specifies the SMTP host to connect to | `string`
| `port` | Specifies the SMTP port | `uint16`
| `senderaddress` | Address from which to send mail | `string`
| `to` | Recipients to send emails to | `[]string`
| `username` | SMTP username | `string`
| `password` | SMTP password | `string`
### matrix
| key | description | type
| --- | --- | ---
| `home-server` | Specifies the Matrix server connect to | `string`
| `room-id` | Specifies the room ID of the room to send messages to | `string`
| `access-token` | Matrix access token | `string`
| `user-id` | Matrix user ID | `string`
To get your access token (assumes you are using [Element](https://element.io/)) :
1. Log in to the account you want to get the access token for. Click on the name in the top left corner, then "Settings".
2. Click the "Help & About" tab (left side of the dialog).
3. Scroll to the bottom and click on `<click to reveal>` part of Access Token.
4. Copy your access token to a safe place.
To get the room ID:
1. On Element or a similar client, navigate to the room.
2. Navigate to the settings from the top menu.
3. Click on Advanced, the room ID is there.
{{% notice info %}}
Make sure to quote the room ID, as [YAML spec defines tags using `!`](https://yaml.org/spec/1.2.2/#3212-tags).
{{% /notice %}}

View File

@ -0,0 +1,26 @@
---
title: "Vault"
weight: 4
---
[Vault](https://www.vaultproject.io/) is a tool for storing secrets and other data securely.
Vault config can be used by prefixing `vault:` in front of a password or ENV var.
This is the object in the config file:
```yaml
vault:
token: hvs.tXqcASvTP8wg92f7riyvGyuf
address: http://127.0.0.1:8200
enabled: false
keys:
- name: mongourl
mountpath: secret
path: mongo/url
type: # KVv1 or KVv2
- name:
path:
type:
mountpath:
```

View File

@ -0,0 +1,10 @@
---
title: "Getting started"
weight: 2
description: >
This page tells you how to get started with Backy.
---
If you have not installed Backy, [see the install documentation](install).
If you need to configure it, [see the config page](config).

View File

@ -0,0 +1,157 @@
---
title: "Config File Definitions"
description: >
This page tells you how to configure Backy.
---
### Commands
The commands section is for defining commands. These can be run with or without a shell and on a host or locally.
See the [commands documentation](/config/commands) for further information.
```yaml
commands:
  stop-docker-container:
output: true # Optional and only when run in list and notifications are sent
    cmd: docker
    args:
      - compose
      - -f /some/path/to/docker-compose.yaml
      - down
    # if host is not defined, cmd will be run locally
    host: some-host 
  backup-docker-container-script:
    cmd: /path/to/script
    # The host has to be defined in the config file
    host: some-host
    environment:
      - FOO=BAR
    - APP=$VAR # defined in .env file in config directory
  shell-cmd:
    cmd: rsync
    shell: bash
    args:
      - -av
- some-host:/path/to/data
- ~/Docker/Backups/docker-data
script:
type: scriptFile # run a local script on a remote host
cmd: path/to/your/script.sh
host: some-host
  hostname:
    cmd: hostname
```
### Lists
To execute groups of commands in sequence, use a list configuration.
```yaml
cmd-lists:
cmds-to-run: # this can be any name you want
# all commands have to be defined in the commands section
order:
- stop-docker-container
- backup-docker-container-script
- shell-cmd
- hostname
getOutput: true # Optional and only for when notifications are sent
notifications:
- matrix
name: backup-some-server
hostname:
name: hostname
order:
- hostname
notifications:
- prod-email
```
### Hosts
The hosts object may or may not be defined.
{{% notice info %}}
If any `host` from a commands object does not match any `host` object, the needed values will be checked in the default SSH config files.
{{% /notice %}}
```yaml
hosts:
# any needed ssh_config(5) keys/values not listed here will be looked up in the config file or the default config file
some-host:
hostname: some-hostname
config: ~/.ssh/config
user: user
privatekeypath: /path/to/private/key
port: 22
# can also be env:VAR or the password itself
password: file:/path/to/file
# can also be env:VAR or the password itself
privatekeypassword: file:/path/to/file
# only one is supported for now
proxyjump: some-proxy-host
```
### Notifications
The notifications object can have two forms.
For more, [see the notification object documentation](/config/notifications). The top-level map key is id that has to be referenced by the `cmd-lists` key `notifications`.
```yaml
notifications:
prod-email:
type: mail
host: yourhost.tld
port: 587
senderAddress: email@domain.tld
recipients:
- admin@domain.tld
username: smtp-username@domain.tld
password: your-password-here
matrix:
type: matrix
home-server: your-home-server.tld
room-id: room-id
access-token: your-access-token
user-id: your-user-id
```
### Logging
cmd-std-out controls whether commands output is echoed to StdOut.
If logfile is not defined, the log file will be written to the config directory in the file `backy.log`.
`console-disabled` controls whether the logging messages are echoed to StdOut. Default is false.
`verbose` basically does nothing as all necessary info is already output.
```yaml
logging:
verbose: false
file: path/to/log/file.log
console-disabled: false
cmd-std-out: false
```
### Vault
[Vault](https://www.vaultproject.io/) can be used to get some configuration values and ENV variables securely.
```
vault:
token: hvs.tXqcASvTP8wg92f7riyvGyuf
address: http://127.0.0.1:8200
enabled: false
keys:
- name: mongourl
mountpath: secret
path: mongo/url
type: # KVv1 or KVv2
- name:
path:
type:
mountpath:
```

View File

@ -0,0 +1,21 @@
---
title: "Install Backy"
weight: 1
description: >
This page tells you how to install Backy.
---
Binaries are available from the [release page](https://git.andrewnw.xyz/CyberShell/backy/releases). Make sure to get the correct version for your system, which supports x86_64, ARM64, and i386.
### Source Install
You can install from source. You will need [Go installed](https://go.dev/doc/install).
Then run:
```bash
go install git.andrewnw.xyz/CyberShell/backy@master
```
Once set, jump over to the [config docs](/getting-started/config) and start configuring your file.

View File

@ -0,0 +1,9 @@
---
title: "Repositories"
weight: 5
---
The repo mirrors are:
* [https://git.andrewnw.xyz/CyberShell/backy](https://git.andrewnw.xyz/CyberShell/backy)
* [https://github.com/CybersShell/backy](https://github.com/CybersShell/backy)

5
docs/go.mod Normal file
View File

@ -0,0 +1,5 @@
module git.andrewnw.xyz/CyberShell/backy-docs
go 1.19
require github.com/McShelby/hugo-theme-relearn v0.0.0-20230209073138-890d12ea922d // indirect

2
docs/go.sum Normal file
View File

@ -0,0 +1,2 @@
github.com/McShelby/hugo-theme-relearn v0.0.0-20230209073138-890d12ea922d h1:weq1mrQ/qNAvGrNgvZVL1K8adbT3bswZf2ABLr/LCIA=
github.com/McShelby/hugo-theme-relearn v0.0.0-20230209073138-890d12ea922d/go.mod h1:mKQQdxZNIlLvAj8X3tMq+RzntIJSr9z7XdzuMomt0IM=

File diff suppressed because one or more lines are too long

66
docs/public/404.html Normal file
View File

@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0, minimum-scale=1.0">
<meta name="generator" content="Hugo 0.110.0">
<meta name="generator" content="Relearn 5.11.2">
<meta name="description" content="">
<title>404 Page not found - A tool for commands</title>
<!-- https://github.com/filamentgroup/loadCSS/blob/master/README.md#how-to-use -->
<link href="/css/fontawesome-all.min.css?1676866111" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="/css/fontawesome-all.min.css?1676866111" rel="stylesheet"></noscript>
<link href="/css/auto-complete.css?1676866111" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="/css/auto-complete.css?1676866111" rel="stylesheet"></noscript>
<link href="/css/perfect-scrollbar.min.css?1676866111" rel="stylesheet">
<link href="/css/nucleus.css?1676866111" rel="stylesheet">
<link href="/css/fonts.css?1676866111" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="/css/fonts.css?1676866111" rel="stylesheet"></noscript>
<link href="/css/theme.css?1676866111" rel="stylesheet">
<link href="/css/theme-auto.css?1676866111" rel="stylesheet" id="variant-style">
<link href="/css/ie.css?1676866111" rel="stylesheet">
<link href="/css/variant.css?1676866111" rel="stylesheet">
<link href="/css/print.css?1676866111" rel="stylesheet" media="print">
<script src="/js/url.js?1676866111"></script>
<script src="/js/variant.js?1676866111"></script>
<script>
// hack to let hugo tell us how to get to the root when using relativeURLs, it needs to be called *url= for it to do its magic:
// https://github.com/gohugoio/hugo/blob/145b3fcce35fbac25c7033c91c1b7ae6d1179da8/transform/urlreplacers/absurlreplacer.go#L72
window.index_js_url="/index.search.js";
var root_url="/";
var baseUri=root_url.replace(/\/$/, '');
// translations
window.T_Copy_to_clipboard = 'Copy to clipboard';
window.T_Copied_to_clipboard = 'Copied to clipboard!';
window.T_Copy_link_to_clipboard = 'Copy link to clipboard';
window.T_Link_copied_to_clipboard = 'Copied link to clipboard!';
window.T_No_results_found = 'No results found for \u0022{0}\u0022';
window.T_N_results_found = '{1} results found for \u0022{0}\u0022';
// some further base stuff
var baseUriFull='http:\/\/example.org/';
window.variants && variants.init( [ 'auto' ] );
</script>
<style>
p, li, ul {
text-align: center
}
ul {
list-style-type: none;
}
</style>
</head>
<body class="mobile-support" data-url="/404.html">
<div id="body" class="default-animation" style="margin-left:0px;">
<div id="sidebar-overlay"></div>
<main id="body-inner" class="chapter" tabindex="-1">
<div class="flex-block-wrapper">
<article class="default">
<h1 id="error">Error</h1>
<p></p>
<p>Woops. Looks like this page doesn&#39;t exist ¯\_(ツ)_/¯.</p>
<p></p>
<p><a href="/index.html">Go to homepage</a></p>
<p><img src="/images/gopher-404.jpg" style="width:50%" alt="Page not found!"></p>
</article>
</div>
</main>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Categories on A tool for commands</title>
<link>http://example.org/categories/index.html</link>
<description>Recent content in Categories on A tool for commands</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="http://example.org/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

303
docs/public/cli/index.html Normal file

File diff suppressed because one or more lines are too long

10
docs/public/cli/index.xml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>CLI on A tool for commands</title>
<link>http://example.org/cli/index.html</link>
<description>Recent content in CLI on A tool for commands</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="http://example.org/cli/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Configuring Backy on A tool for commands</title>
<link>http://example.org/config/index.html</link>
<description>Recent content in Configuring Backy on A tool for commands</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="http://example.org/config/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Command Lists</title>
<link>http://example.org/config/command-lists/index.html</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://example.org/config/command-lists/index.html</guid>
<description>Command lists are for executing commands in sequence and getting notifications from them.
The top-level object key can be anything you want.
key description type required order Defines the sequence of commands to execute []string yes notifications The notification IDs to use on success and failure []string no name Optional name of the list string no cron Time at which to schedule the list. string no Order The order is an array of commands to execute in order.</description>
</item>
<item>
<title>Commands</title>
<link>http://example.org/config/commands/index.html</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://example.org/config/commands/index.html</guid>
<description>The yaml top-level map can be any string.
The top-level name must be unique.
commands: stop-docker-container: cmd: docker Args: - compose - -f /some/path/to/docker-compose.yaml - down # if host is not defined, command will be run locally host: some-host backup-docker-container-script: cmd: /path/to/script # The host has to be defined in either the config file or the SSH Config files host: some-host environment: - FOO=BAR - APP=$VAR Values available for this section:</description>
</item>
<item>
<title>Notifications</title>
<link>http://example.org/config/notifications/index.html</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://example.org/config/notifications/index.html</guid>
<description>Notifications can be sent on command list completion and failure.
The supported platforms for notifications are email (SMTP) and Matrix.
Notifications are defined by type. The top-level object will be the id, and the type is required.
Info Type in a cmd-configs object must match one of these.
notifications: prod-email: type: mail host: yourhost.tld port: 587 senderaddress: email@domain.tld to: - admin@domain.tld username: smtp-username@domain.tld password: your-password-here matrix: type: matrix home-server: your-home-server.tld room-id: room-id access-token: your-access-token user-id: your-user-id Types recognized are type: mail and type: matrix</description>
</item>
</channel>
</rss>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,58 @@
.autocomplete-suggestions {
text-align: left;
cursor: default;
border: 1px solid #ccc;
border-top: 0;
background: #fff;
box-shadow: -1px 1px 3px rgba(0,0,0,.1);
/* core styles should not be changed */
position: absolute;
display: none;
z-index: 9999;
max-height: 150px;
max-height: calc( 100vh - 150px );
overflow: hidden;
overflow-y: auto;
box-sizing: border-box;
}
.autocomplete-suggestion {
position: relative;
cursor: pointer;
padding: 7px;
line-height: 23px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #282828;
}
.autocomplete-suggestion b {
font-weight: normal;
color: #1f8dd6;
}
.autocomplete-suggestion.selected {
background: #282828;
color: #fff;
}
.autocomplete-suggestion:hover,
.autocomplete-suggestion:focus,
.autocomplete-suggestion:active,
.autocomplete-suggestion:hover > .context,
.autocomplete-suggestion:focus > .context,
.autocomplete-suggestion:active > .context,
#searchresults .autocomplete-suggestion:hover > .context,
#searchresults .autocomplete-suggestion:focus > .context,
#searchresults .autocomplete-suggestion:active > .context {
background: #383838;
color: #fff;
}
.autocomplete-suggestion > .context {
font-size: 12px;
margin-inline-start: 1em;
overflow: hidden;
text-overflow: ellipsis;
}

View File

@ -0,0 +1,83 @@
/* based on base16-snazzy
/* Background */ .chroma { color: #e2e4e5; background-color: #282a36 }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #ff5c57 }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Keyword */ .chroma .k { color: #ff6ac1 }
/* KeywordConstant */ .chroma .kc { color: #ff6ac1 }
/* KeywordDeclaration */ .chroma .kd { color: #ff5c57 }
/* KeywordNamespace */ .chroma .kn { color: #ff6ac1 }
/* KeywordPseudo */ .chroma .kp { color: #ff6ac1 }
/* KeywordReserved */ .chroma .kr { color: #ff6ac1 }
/* KeywordType */ .chroma .kt { color: #9aedfe }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { color: #57c7ff }
/* NameBuiltin */ .chroma .nb { color: #ff5c57 }
/* NameBuiltinPseudo */ .chroma .bp { }
/* NameClass */ .chroma .nc { color: #f3f99d }
/* NameConstant */ .chroma .no { color: #ff9f43 }
/* NameDecorator */ .chroma .nd { color: #ff9f43 }
/* NameEntity */ .chroma .ni { }
/* NameException */ .chroma .ne { }
/* NameFunction */ .chroma .nf { color: #57c7ff }
/* NameFunctionMagic */ .chroma .fm { }
/* NameLabel */ .chroma .nl { color: #ff5c57 }
/* NameNamespace */ .chroma .nn { }
/* NameOther */ .chroma .nx { }
/* NameProperty */ .chroma .py { }
/* NameTag */ .chroma .nt { color: #ff6ac1 }
/* NameVariable */ .chroma .nv { color: #ff5c57 }
/* NameVariableClass */ .chroma .vc { color: #ff5c57 }
/* NameVariableGlobal */ .chroma .vg { color: #ff5c57 }
/* NameVariableInstance */ .chroma .vi { color: #ff5c57 }
/* NameVariableMagic */ .chroma .vm { }
/* Literal */ .chroma .l { }
/* LiteralDate */ .chroma .ld { }
/* LiteralString */ .chroma .s { color: #5af78e }
/* LiteralStringAffix */ .chroma .sa { color: #5af78e }
/* LiteralStringBacktick */ .chroma .sb { color: #5af78e }
/* LiteralStringChar */ .chroma .sc { color: #5af78e }
/* LiteralStringDelimiter */ .chroma .dl { color: #5af78e }
/* LiteralStringDoc */ .chroma .sd { color: #5af78e }
/* LiteralStringDouble */ .chroma .s2 { color: #5af78e }
/* LiteralStringEscape */ .chroma .se { color: #5af78e }
/* LiteralStringHeredoc */ .chroma .sh { color: #5af78e }
/* LiteralStringInterpol */ .chroma .si { color: #5af78e }
/* LiteralStringOther */ .chroma .sx { color: #5af78e }
/* LiteralStringRegex */ .chroma .sr { color: #5af78e }
/* LiteralStringSingle */ .chroma .s1 { color: #5af78e }
/* LiteralStringSymbol */ .chroma .ss { color: #5af78e }
/* LiteralNumber */ .chroma .m { color: #ff9f43 }
/* LiteralNumberBin */ .chroma .mb { color: #ff9f43 }
/* LiteralNumberFloat */ .chroma .mf { color: #ff9f43 }
/* LiteralNumberHex */ .chroma .mh { color: #ff9f43 }
/* LiteralNumberInteger */ .chroma .mi { color: #ff9f43 }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ff9f43 }
/* LiteralNumberOct */ .chroma .mo { color: #ff9f43 }
/* Operator */ .chroma .o { color: #ff6ac1 }
/* OperatorWord */ .chroma .ow { color: #ff6ac1 }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #78787e }
/* CommentHashbang */ .chroma .ch { color: #78787e }
/* CommentMultiline */ .chroma .cm { color: #78787e }
/* CommentSingle */ .chroma .c1 { color: #78787e }
/* CommentSpecial */ .chroma .cs { color: #78787e }
/* CommentPreproc */ .chroma .cp { color: #78787e }
/* CommentPreprocFile */ .chroma .cpf { color: #78787e }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { color: #ff5c57 }
/* GenericEmph */ .chroma .ge { text-decoration: underline }
/* GenericError */ .chroma .gr { color: #ff5c57 }
/* GenericHeading */ .chroma .gh { font-weight: bold }
/* GenericInserted */ .chroma .gi { font-weight: bold }
/* GenericOutput */ .chroma .go { color: #43454f }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { font-style: italic }
/* GenericSubheading */ .chroma .gu { font-weight: bold }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { }

View File

@ -0,0 +1,89 @@
/* this variant does not work well if we use fallback styles for IE11 so better
ignore this variant in IE completely */
@supports not (-ms-high-contrast:none) {
/* based on rrt
/* Background */ .chroma { color: #f8f8f2; background-color: #000000 }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7c7c79 }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7c7c79 }
/* Keyword */ .chroma .k { color: #ff0000 }
/* KeywordConstant */ .chroma .kc { color: #ff0000 }
/* KeywordDeclaration */ .chroma .kd { color: #ff0000 }
/* KeywordNamespace */ .chroma .kn { color: #ff0000 }
/* KeywordPseudo */ .chroma .kp { color: #ff0000 }
/* KeywordReserved */ .chroma .kr { color: #ff0000 }
/* KeywordType */ .chroma .kt { color: #ee82ee }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { }
/* NameBuiltin */ .chroma .nb { }
/* NameBuiltinPseudo */ .chroma .bp { }
/* NameClass */ .chroma .nc { }
/* NameConstant */ .chroma .no { color: #7fffd4 }
/* NameDecorator */ .chroma .nd { }
/* NameEntity */ .chroma .ni { }
/* NameException */ .chroma .ne { }
/* NameFunction */ .chroma .nf { color: #ffff00 }
/* NameFunctionMagic */ .chroma .fm { }
/* NameLabel */ .chroma .nl { }
/* NameNamespace */ .chroma .nn { }
/* NameOther */ .chroma .nx { }
/* NameProperty */ .chroma .py { }
/* NameTag */ .chroma .nt { }
/* NameVariable */ .chroma .nv { color: #eedd82 }
/* NameVariableClass */ .chroma .vc { }
/* NameVariableGlobal */ .chroma .vg { }
/* NameVariableInstance */ .chroma .vi { }
/* NameVariableMagic */ .chroma .vm { }
/* Literal */ .chroma .l { }
/* LiteralDate */ .chroma .ld { }
/* LiteralString */ .chroma .s { color: #87ceeb }
/* LiteralStringAffix */ .chroma .sa { color: #87ceeb }
/* LiteralStringBacktick */ .chroma .sb { color: #87ceeb }
/* LiteralStringChar */ .chroma .sc { color: #87ceeb }
/* LiteralStringDelimiter */ .chroma .dl { color: #87ceeb }
/* LiteralStringDoc */ .chroma .sd { color: #87ceeb }
/* LiteralStringDouble */ .chroma .s2 { color: #87ceeb }
/* LiteralStringEscape */ .chroma .se { color: #87ceeb }
/* LiteralStringHeredoc */ .chroma .sh { color: #87ceeb }
/* LiteralStringInterpol */ .chroma .si { color: #87ceeb }
/* LiteralStringOther */ .chroma .sx { color: #87ceeb }
/* LiteralStringRegex */ .chroma .sr { color: #87ceeb }
/* LiteralStringSingle */ .chroma .s1 { color: #87ceeb }
/* LiteralStringSymbol */ .chroma .ss { color: #ff6600 }
/* LiteralNumber */ .chroma .m { color: #ff6600 }
/* LiteralNumberBin */ .chroma .mb { color: #ff6600 }
/* LiteralNumberFloat */ .chroma .mf { color: #ff6600 }
/* LiteralNumberHex */ .chroma .mh { color: #ff6600 }
/* LiteralNumberInteger */ .chroma .mi { color: #ff6600 }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ff6600 }
/* LiteralNumberOct */ .chroma .mo { color: #ff6600 }
/* Operator */ .chroma .o { }
/* OperatorWord */ .chroma .ow { }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #00ff00 }
/* CommentHashbang */ .chroma .ch { color: #00ff00 }
/* CommentMultiline */ .chroma .cm { color: #00ff00 }
/* CommentSingle */ .chroma .c1 { color: #00ff00 }
/* CommentSpecial */ .chroma .cs { color: #00ff00 }
/* CommentPreproc */ .chroma .cp { color: #e5e5e5 }
/* CommentPreprocFile */ .chroma .cpf { color: #e5e5e5 }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { }
/* GenericEmph */ .chroma .ge { }
/* GenericError */ .chroma .gr { }
/* GenericHeading */ .chroma .gh { }
/* GenericInserted */ .chroma .gi { }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { }
/* GenericSubheading */ .chroma .gu { }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { }
/* TextWhitespace */ .chroma .w { }
}

View File

@ -0,0 +1,83 @@
/* based on monokai
/* Background */ .chroma { color: #f8f8f8; background-color: #2b2b2b }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #960050; }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Keyword */ .chroma .k { color: #66d9ef }
/* KeywordConstant */ .chroma .kc { color: #66d9ef }
/* KeywordDeclaration */ .chroma .kd { color: #66d9ef }
/* KeywordNamespace */ .chroma .kn { color: #f92672 }
/* KeywordPseudo */ .chroma .kp { color: #66d9ef }
/* KeywordReserved */ .chroma .kr { color: #66d9ef }
/* KeywordType */ .chroma .kt { color: #66d9ef }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { color: #a6e22e }
/* NameBuiltin */ .chroma .nb { }
/* NameBuiltinPseudo */ .chroma .bp { }
/* NameClass */ .chroma .nc { color: #a6e22e }
/* NameConstant */ .chroma .no { color: #66d9ef }
/* NameDecorator */ .chroma .nd { color: #a6e22e }
/* NameEntity */ .chroma .ni { }
/* NameException */ .chroma .ne { color: #a6e22e }
/* NameFunction */ .chroma .nf { color: #a6e22e }
/* NameFunctionMagic */ .chroma .fm { }
/* NameLabel */ .chroma .nl { }
/* NameNamespace */ .chroma .nn { }
/* NameOther */ .chroma .nx { color: #a6e22e }
/* NameProperty */ .chroma .py { }
/* NameTag */ .chroma .nt { color: #f92672 }
/* NameVariable */ .chroma .nv { }
/* NameVariableClass */ .chroma .vc { }
/* NameVariableGlobal */ .chroma .vg { }
/* NameVariableInstance */ .chroma .vi { }
/* NameVariableMagic */ .chroma .vm { }
/* Literal */ .chroma .l { color: #ae81ff }
/* LiteralDate */ .chroma .ld { color: #e6db74 }
/* LiteralString */ .chroma .s { color: #e6db74 }
/* LiteralStringAffix */ .chroma .sa { color: #e6db74 }
/* LiteralStringBacktick */ .chroma .sb { color: #e6db74 }
/* LiteralStringChar */ .chroma .sc { color: #e6db74 }
/* LiteralStringDelimiter */ .chroma .dl { color: #e6db74 }
/* LiteralStringDoc */ .chroma .sd { color: #e6db74 }
/* LiteralStringDouble */ .chroma .s2 { color: #e6db74 }
/* LiteralStringEscape */ .chroma .se { color: #ae81ff }
/* LiteralStringHeredoc */ .chroma .sh { color: #e6db74 }
/* LiteralStringInterpol */ .chroma .si { color: #e6db74 }
/* LiteralStringOther */ .chroma .sx { color: #e6db74 }
/* LiteralStringRegex */ .chroma .sr { color: #e6db74 }
/* LiteralStringSingle */ .chroma .s1 { color: #e6db74 }
/* LiteralStringSymbol */ .chroma .ss { color: #e6db74 }
/* LiteralNumber */ .chroma .m { color: #ae81ff }
/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
/* Operator */ .chroma .o { color: #f92672 }
/* OperatorWord */ .chroma .ow { color: #f92672 }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #7c7c7c }
/* CommentHashbang */ .chroma .ch { color: #7c7c7c }
/* CommentMultiline */ .chroma .cm { color: #7c7c7c }
/* CommentSingle */ .chroma .c1 { color: #7c7c7c }
/* CommentSpecial */ .chroma .cs { color: #7c7c7c }
/* CommentPreproc */ .chroma .cp { color: #7c7c7c }
/* CommentPreprocFile */ .chroma .cpf { color: #7c7c7c }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { color: #f92672 }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { }
/* GenericHeading */ .chroma .gh { }
/* GenericInserted */ .chroma .gi { color: #a6e22e }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #7c7c7c }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { }
/* TextWhitespace */ .chroma .w { }

View File

@ -0,0 +1,83 @@
/* based on tango
/* Background */ .chroma { background-color: #f8f8f8 }
/* Other */ .chroma .x { color: #000000 }
/* Error */ .chroma .err { color: #a40000 }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Keyword */ .chroma .k { color: #204a87; font-weight: bold }
/* KeywordConstant */ .chroma .kc { color: #204a87; font-weight: bold }
/* KeywordDeclaration */ .chroma .kd { color: #204a87; font-weight: bold }
/* KeywordNamespace */ .chroma .kn { color: #204a87; font-weight: bold }
/* KeywordPseudo */ .chroma .kp { color: #204a87; font-weight: bold }
/* KeywordReserved */ .chroma .kr { color: #204a87; font-weight: bold }
/* KeywordType */ .chroma .kt { color: #204a87; font-weight: bold }
/* Name */ .chroma .n { color: #000000 }
/* NameAttribute */ .chroma .na { color: #c4a000 }
/* NameBuiltin */ .chroma .nb { color: #204a87 }
/* NameBuiltinPseudo */ .chroma .bp { color: #3465a4 }
/* NameClass */ .chroma .nc { color: #000000 }
/* NameConstant */ .chroma .no { color: #000000 }
/* NameDecorator */ .chroma .nd { color: #5c35cc; font-weight: bold }
/* NameEntity */ .chroma .ni { color: #ce5c00 }
/* NameException */ .chroma .ne { color: #cc0000; font-weight: bold }
/* NameFunction */ .chroma .nf { color: #000000 }
/* NameFunctionMagic */ .chroma .fm { color: #000000 }
/* NameLabel */ .chroma .nl { color: #f57900 }
/* NameNamespace */ .chroma .nn { color: #000000 }
/* NameOther */ .chroma .nx { color: #000000 }
/* NameProperty */ .chroma .py { color: #000000 }
/* NameTag */ .chroma .nt { color: #204a87; font-weight: bold }
/* NameVariable */ .chroma .nv { color: #000000 }
/* NameVariableClass */ .chroma .vc { color: #000000 }
/* NameVariableGlobal */ .chroma .vg { color: #000000 }
/* NameVariableInstance */ .chroma .vi { color: #000000 }
/* NameVariableMagic */ .chroma .vm { color: #000000 }
/* Literal */ .chroma .l { color: #000000 }
/* LiteralDate */ .chroma .ld { color: #000000 }
/* LiteralString */ .chroma .s { color: #4e9a06 }
/* LiteralStringAffix */ .chroma .sa { color: #4e9a06 }
/* LiteralStringBacktick */ .chroma .sb { color: #4e9a06 }
/* LiteralStringChar */ .chroma .sc { color: #4e9a06 }
/* LiteralStringDelimiter */ .chroma .dl { color: #4e9a06 }
/* LiteralStringDoc */ .chroma .sd { color: #8f5902; font-style: italic }
/* LiteralStringDouble */ .chroma .s2 { color: #4e9a06 }
/* LiteralStringEscape */ .chroma .se { color: #4e9a06 }
/* LiteralStringHeredoc */ .chroma .sh { color: #4e9a06 }
/* LiteralStringInterpol */ .chroma .si { color: #4e9a06 }
/* LiteralStringOther */ .chroma .sx { color: #4e9a06 }
/* LiteralStringRegex */ .chroma .sr { color: #4e9a06 }
/* LiteralStringSingle */ .chroma .s1 { color: #4e9a06 }
/* LiteralStringSymbol */ .chroma .ss { color: #4e9a06 }
/* LiteralNumber */ .chroma .m { color: #0000cf; font-weight: bold }
/* LiteralNumberBin */ .chroma .mb { color: #0000cf; font-weight: bold }
/* LiteralNumberFloat */ .chroma .mf { color: #0000cf; font-weight: bold }
/* LiteralNumberHex */ .chroma .mh { color: #0000cf; font-weight: bold }
/* LiteralNumberInteger */ .chroma .mi { color: #0000cf; font-weight: bold }
/* LiteralNumberIntegerLong */ .chroma .il { color: #0000cf; font-weight: bold }
/* LiteralNumberOct */ .chroma .mo { color: #0000cf; font-weight: bold }
/* Operator */ .chroma .o { color: #ce5c00; font-weight: bold }
/* OperatorWord */ .chroma .ow { color: #204a87; font-weight: bold }
/* Punctuation */ .chroma .p { color: #000000; font-weight: bold }
/* Comment */ .chroma .c { color: #8f5902; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #8f5902; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #8f5902; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #8f5902; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #8f5902; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #8f5902; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #8f5902; font-style: italic }
/* Generic */ .chroma .g { color: #000000 }
/* GenericDeleted */ .chroma .gd { color: #a40000 }
/* GenericEmph */ .chroma .ge { color: #000000; font-style: italic }
/* GenericError */ .chroma .gr { color: #ef2929 }
/* GenericHeading */ .chroma .gh { color: #000080; font-weight: bold }
/* GenericInserted */ .chroma .gi { color: #00a000 }
/* GenericOutput */ .chroma .go { color: #000000; font-style: italic }
/* GenericPrompt */ .chroma .gp { color: #8f5902 }
/* GenericStrong */ .chroma .gs { color: #000000; font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #800080; font-weight: bold }
/* GenericTraceback */ .chroma .gt { color: #a40000; font-weight: bold }
/* GenericUnderline */ .chroma .gl { color: #000000; text-decoration: underline }
/* TextWhitespace */ .chroma .w { color: #f8f8f8; text-decoration: underline }

File diff suppressed because one or more lines are too long

39
docs/public/css/fonts.css Normal file
View File

@ -0,0 +1,39 @@
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 200;
src: url("../fonts/WorkSans-ExtraLight.woff") format("woff2"), url("../fonts/WorkSans-ExtraLight.woff") format("woff");
font-display: swap;
}
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 300;
src: url("../fonts/WorkSans-Light.woff2") format("woff2"), url("../fonts/WorkSans-Light.woff") format("woff");
font-display: swap;
}
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 400;
src: url("../fonts/WorkSans-Regular.woff2") format("woff2"), url("../fonts/WorkSans-Regular.woff") format("woff");
font-display: swap;
}
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 500;
src: url("../fonts/WorkSans-Medium.woff2") format("woff2"), url("../fonts/WorkSans-Medium.woff") format("woff");
font-display: swap;
}
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 600;
src: url("../fonts/WorkSans-Bold.woff2") format("woff2"), url("../fonts/WorkSans-Bold.woff") format("woff");
font-display: swap;
}

View File

@ -0,0 +1,233 @@
@import "theme-relearn-light.css";
#sidebar {
display: none;
}
#body {
margin-left: 0 !important;
min-width: 100% !important;
max-width: 100% !important;
width: 100% !important;
}
#body #navigation {
display: none;
}
html{
font-size: 8.763pt;
}
body {
background-color: white;
}
code.copy-to-clipboard-code {
border-bottom-right-radius: 2px;
border-top-right-radius: 2px;
border-right-width: 1px;
}
span > code.copy-to-clipboard-code {
border-end-end-radius: 2px;
border-start-end-radius: 2px;
border-inline-end-width: 1px;
}
pre {
border: 1px solid #ccc;
}
#body #topbar{
background-color: #fff; /* avoid background bleeding*/
border-bottom: 1px solid #ddd;
border-radius: 0;
padding-left: 0; /* for print, we want to align with the footer to ease the layout */
color: #777;
}
.navigation,
#top-print-link,
#top-github-link {
/* we don't need this while printing */
display: none;
}
#body #breadcrumbs {
width: 100%;
}
#body #breadcrumbs .links {
overflow-x: hidden;
visibility: visible;
}
.copy-to-clipboard-button {
display: none;
}
#body h1, #body h2, #body h3, #body .article-subheading, #body h4, #body h5, #body h6 {
/* better contrast for colored elements */
color: black;
}
#body th, #body td,
#body code, #body strong, #body b,
#body li, #body dd, #body dt,
#body p,
#body a, #body button, #body .badge .badge-content {
/* better contrast for colored elements */
color: black;
}
#body .anchor{
display: none;
}
#body pre,
#body code {
background-color: white;
border-color: #ddd;
}
hr{
border-bottom: 1px solid #ddd;
}
body,
#body,
#body-inner {
overflow: visible !important; /* turn off limitations for perfect scrollbar */
}
#body #body-inner {
/* reset paddings for chapters in screen */
padding: 0 3.25rem 4rem 3.25rem;
}
#body #body-inner h1 {
border-bottom: 1px solid #ddd;
margin-bottom: 2rem;
padding-bottom: .75rem;
}
#body-inner .chapter h3:first-of-type {
margin-top: 2rem;
}
/* Children shortcode */
.children p,
.children-li p,
.children-h2 p,
.children-h3 p {
font-size: 1rem;
}
.footline {
/* in print mode show footer line to signal reader the end of document */
border-top: 1px solid #ddd;
color: #777;
margin-top: 1.5rem;
padding-top: .75rem;
}
#body #body-inner .footline a,
#body #body-inner .btn a {
text-decoration: none;
}
#body #body-inner a {
/* in print we want to distinguish links in our content from
normal text even if printed black/white;
don't use a.highlight in selector to also get links that are
put as HTML into markdown */
text-decoration-line: underline;
}
#toc-menu {
/* we don't need this while printing */
display: none;
}
#body #sidebar-toggle-span {
/* we don't need this while printing */
display: none;
}
#breadcrumbs .links {
display: inline;
}
#topbar{
/* the header is sticky which is not suitable for print; */
position: inherit; /* IE11 doesn't know "initial" here */
}
#topbar > div {
background-color: #ffffff; /* IE11 doesn't know "initial" here */
}
#body .tab-nav-button:not(.active) {
opacity: .5;
}
#head-tags {
display: none;
}
mark {
background: inherit;
color: inherit;
}
.mermaid > svg:hover {
border-color: transparent;
}
div.box {
border: 1px solid #ddd;
}
div.box > .box-content {
background-color: white;
}
rapi-doc{
/* adjust rapi-doc internals to fill out available space with render-style=read */
margin-left: calc( -80px );
width: calc( 100% + 80px + 80px );
}
@media (max-width: 1023px) {
rapi-doc {
margin-left: calc( -8px );
width: calc( 100% + 8px + 8px );
}
}
rapi-doc::part(section-tag) {
/* adjust rapi-doc internals to fill out available space with render-style=read */
margin-left: 80px;
margin-right: 80px;
padding-left: 0;
padding-right: 0;
}
@media (max-width: 1023px) {
rapi-doc::part(section-tag) {
margin-left: 8px;
margin-right: 8px;
padding-left: 0;
padding-right: 0;
}
}
rapi-doc::part(section-main-content) {
/* override variables for adapting rapidoc design to print theme */
--fg: black;
--fg2: black;
--fg3: black;
}
rapi-doc::part(section-overview-title) {
/* set print color for titles */
color: black !important;
}
rapi-doc::part(operation-divider) {
/* remove whitespace */
margin-bottom: 1rem;
margin-top: 1rem;
}
rapi-doc::part(section-navbar) {
/* removes the nav bar for render-style=read */
display: none;
}
.btn,
#body .tab-nav-button {
color: black !important;
}
#body .tab-nav-button.active {
background-color: white !important;
border-bottom-color: white !important;
color: black;
}
#body .tab-nav-button:not(.active) {
opacity: 1;
}
article {
break-before: page;
}
#body-inner > * > article:first-of-type {
break-before: avoid;
}

659
docs/public/css/ie.css Normal file
View File

@ -0,0 +1,659 @@
@media all and (-ms-high-contrast:none) {
/* turn off LTR support as it is dependend on CSS properties that aren't supported by IE11 */
article,
.toc-wrapper,
.tags {
direction: ltr;
}
h2, h3, h4, h5, h6 {
padding-right: 2rem;
}
blockquote {
border-left: 10px solid rgba( 134, 134, 134, .4 );
padding-left: 0.85rem;
}
blockquote cite {
text-align: right;
}
th {
text-align: left;
}
.disableInlineCopyToClipboard span > code.copy-to-clipboard-code {
border-bottom-right-radius: 2px;
border-top-right-radius: 2px;
border-right-width: 1px;
}
.anchor {
margin-left: .66em;
}
div.attachments .box-content {
padding-left: 1.75rem;
}
.expand > label {
left: 0;
}
.expand > input + label > .fa-chevron-left {
display: none !important;
}
.expand > input + label > .fa-chevron-right {
display: inline-block !important;
}
.expand > input:checked + label > .fa-chevron-right {
display: none !important;
}
#body .tab-nav-button {
margin-left: 4px;
}
#body .tab-nav-button.direction-rtl {
float: left;
}
#body .tab-nav-button:first-child {
margin-left: 9px;
}
.searchform input {
margin-right: .5rem;
}
.autocomplete-suggestion > .context {
margin-left: 1em;
}
.badge > .badge-title {
border-right: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.badge.badge-with-title > .badge-content {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
article ul li:has(input[type="checkbox"]) {
margin-left: -1rem;
}
/* set default colors as in variant.css for IE11 */
body {
background-color: #ffffff; /* var(--MAIN-BG-color) */
color: #101010; /* var(--MAIN-TEXT-color) */
font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; /* var(--MAIN-font) */
}
.footerVisitedLinks > *,
a,
.anchor,
#toc-menu,
#body a.highlight:after,
#searchresults .autocomplete-suggestion {
color: #486ac9; /* var(--MAIN-LINK-color) */
}
a:hover,
.anchor:hover,
#toc-menu:hover,
#body a.highlight:hover:after {
color: #202891; /* var(--MAIN-LINK-HOVER-color) */
}
#sidebar {
background: #282828; /* var(--MENU-SECTIONS-BG-color) */
}
#header-wrapper {
/* initially use section background to avoid flickering on load when a
non default variant is active */
background-color: rgba( 0, 0, 0, 0 ); /* var(--MENU-SECTIONS-BG-color) */
border-bottom-color: rgba( 0, 0, 0, 0 ); /* var(--MENU-SECTIONS-BG-color) */
color: #e0e0e0; /* var(--MENU-SEARCH-color) */
}
.searchbox {
border-color: #e0e0e0; /* var(--MENU-SEARCH-BORDER-color) */
background-color: #323232; /* var(--MENU-SEARCH-BG-color) */
}
.searchbox input:-ms-input-placeholder {
color: #e0e0e0; /* var(--INTERNAL-MENU-SEARCH-color) */
opacity: .45;
}
#sidebar .searchbox > :first-child,
#sidebar .searchbox button,
.searchbox span {
color: #e0e0e0; /* var(--INTERNAL-MENU-SEARCH-color) */
}
.searchform input:-ms-input-placeholder {
color: rgba( 134, 134, 134 );
opacity: .666;
}
#sidebar .collapsible-menu .toggle,
#sidebar .select-container,
#sidebar a,
#sidebar button {
color: #bababa; /* var(--MENU-SECTIONS-LINK-color) */
}
#sidebar select:hover,
#sidebar .collapsible-menu .toggle:hover,
#sidebar .select-container:hover,
#sidebar a:hover,
#sidebar button:hover {
color: #ffffff; /* var(--MENU-SECTIONS-LINK-HOVER-color) */
}
#sidebar ul.topics > li.parent,
#sidebar ul.topics > li.active {
background-color: rgba( 0, 0, 0, .166 ); /* var(--MENU-SECTIONS-ACTIVE-BG-color) */
}
#sidebar ul.collapsible-menu li.active > .toggle,
#sidebar ul.topics li.active > a {
color: #444444; /* var(--MENU-SECTION-ACTIVE-CATEGORY-color) */
}
#sidebar ul.topics li.active > a {
background-color: #ffffff; /* var(--MENU-SECTION-ACTIVE-CATEGORY-BG-color) */
}
#sidebar ul li.visited > a .read-icon {
color: #486ac9; /* var(--MENU-VISITED-color) */
}
#sidebar .nav-title {
color: #ffffff; /* var(--MENU-SECTIONS-LINK-HOVER-color) */
}
#sidebar hr {
border-color: #606060; /* var(--MENU-SECTION-HR-color) */
}
#footer {
color: #bababa; /* var(--MENU-SECTIONS-LINK-color) */
}
mark {
background-color: #ffff00;
}
h1 {
color: #101010; /* var(--MAIN-TEXT-color) */
font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; /* var(--MAIN-font) */
}
h2, h3, .article-subheading, h4, h5, h6 {
color: #4a4a4a; /* var(--MAIN-TITLES-TEXT-color) */
font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; /* var(--MAIN-TITLES-TEXT-font) */
}
.expand > label {
color: #486ac9; /* var(--MAIN-LINK-color) */
}
.expand > label:hover {
color: #202891; /* var(--MAIN-LINK-HOVER-color) */
}
.expand > label:after {
color: #202891; /* var(--MAIN-LINK-HOVER-color) */
}
div.box {
background-color: rgba( 128, 128, 128, 1 ); /* var(--INTERNAL-BOX-NEUTRAL-color) */
}
div.box > .box-label {
color: rgba( 255, 255, 255, 1 ); /* var(--BOX-CAPTION-color) */
}
div.box > .box-content {
background-color: rgba( 255, 255, 255, .833 ); /* var(--BOX-BG-color) */
color: rgba( 16, 16, 16, 1 ); /* var(--BOX-TEXT-color) */
}
div.box.info {
background-color: rgba( 48, 117, 229, 1 ); /* var(--INTERNAL-BOX-INFO-color) */
}
div.box.info > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-INFO-TEXT-color) */
}
div.box.warning {
background-color: rgba( 224, 62, 62, 1 ); /* var(--INTERNAL-BOX-WARNING-color) */
}
div.box.warning > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-WARNING-TEXT-color) */
}
div.box.note {
background-color: rgba( 237, 153, 9, 1 ); /* var(--INTERNAL-BOX-NOTE-color) */
}
div.box.note > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-NOTE-TEXT-color) */
}
div.box.tip {
background-color: rgba( 42, 178, 24, 1 ); /* var(--INTERNAL-BOX-TIP-color) */
}
div.box.tip > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-TIP-TEXT-color) */
}
div.box.primary {
background-color: #7dc903; /* var(--INTERNAL-PRIMARY-color) */
}
div.box.primary > .box-content {
color: #101010; /* var(--INTERNAL-MAIN-TEXT-color) */
}
div.box.secondary {
background-color: #486ac9; /* var(--INTERNAL-SECONDARY-color) */
}
div.box.secondary > .box-content {
color: #101010; /* var(--INTERNAL-MAIN-TEXT-color) */
}
div.box.accent {
background-color: #ff88ff; /* var(--INTERNAL-ACCENT-color) */
}
div.box.accent > .box-content {
color: #101010; /* var(--INTERNAL-MAIN-TEXT-color) */
}
div.box.blue {
background-color: rgba( 48, 117, 229, 1 ); /* var(--INTERNAL-BOX-BLUE-color) */
}
div.box.blue > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-BLUE-TEXT-color) */
}
div.box.green {
background-color: rgba( 42, 178, 24, 1 ); /* var(--INTERNAL-BOX-GREEN-color) */
}
div.box.green > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-GREEN-TEXT-color) */
}
div.box.grey {
background-color: rgba( 128, 128, 128, 1 ); /* var(--INTERNAL-BOX-GREY-color) */
}
div.box.grey > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-GREY-TEXT-color) */
}
div.box.orange {
background-color: rgba( 237, 153, 9, 1 ); /* var(--INTERNAL-BOX-ORANGE-color) */
}
div.box.orange > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-ORANGE-TEXT-color) */
}
div.box.red {
background-color: rgba( 224, 62, 62, 1 ); /* var(--INTERNAL-BOX-RED-color) */
}
div.box.red > .box-content {
color: rgba( 16, 16, 16, 1 ); /* var(--INTERNAL-BOX-RED-TEXT-color) */
}
div.box.transparent {
background-color: transparent;
}
div.box.transparent > .box-label {
color: #4a4a4a; /* var(--MAIN-TITLES-TEXT-color) */
}
div.box.transparent > .box-content {
background-color: transparent;
color: #101010; /* var(--MAIN-TEXT-color) */
}
code,
kbd,
pre,
samp {
font-family: "Consolas", menlo, monospace; /* var(--CODE-font) */
}
code {
background-color: #fffae9; /* var(--CODE-INLINE-BG-color) */
border-color: #f8e8c8; /* var(--CODE-INLINE-BORDER-color) */
color: #5e5e5e; /* var(--CODE-INLINE-color) */
}
pre {
background-color: #f8f8f8; /* var(--CODE-BLOCK-BG-color) */
border-color: #d8d8d8; /* var(--CODE-BLOCK-BORDER-color) */
color: #000000; /* var(--CODE-BLOCK-color) */
}
table {
background-color: #ffffff; /* var(--INTERNAL-MAIN-BG-color) */
}
.lightbox img{
background-color: #ffffff /* var(--INTERNAL-MAIN-BG-color); */
}
#topbar {
background-color: #ffffff; /* var(--MAIN-BG-color) */
}
#body a[aria-disabled="true"],
#searchresults .autocomplete-suggestion > .context {
color: #101010; /* var(--MAIN-TEXT-color) - inherit is not processed correctly in Chrome */
}
.copy-to-clipboard-button {
background-color: #fffae9; /* var(--CODE-INLINE-BG-color) */
border-color: #f8e8c8; /* var(--CODE-INLINE-BORDER-color) */
color: #5e5e5e; /* var(--CODE-INLINE-color) */
font-family: "Consolas", menlo, monospace; /* var(--CODE-font) */
}
.copy-to-clipboard-button:hover {
background-color: #5e5e5e; /* var(--CODE-INLINE-color) */
color: #fffae9; /* var(--CODE-INLINE-BG-color) */
}
pre .copy-to-clipboard-button {
border-color: #d8d8d8; /* var(--CODE-BLOCK-BORDER-color) */
color: #486ac9; /* var(--MAIN-LINK-color) */
}
pre .copy-to-clipboard-button:hover {
background-color: #486ac9; /* var(--MAIN-LINK-color) */
border-color: #486ac9; /* var(--MAIN-LINK-color) */
color: #f8f8f8; /* var(--CODE-BLOCK-BG-color) */
}
#homelinks {
background-color: #7dc903; /* var(--MENU-HEADER-BORDER-color) */
border-color: #7dc903; /* var(--MENU-HEADER-BORDER-color) */
}
#homelinks a {
color: #404040 /* var(--MENU-HOME-LINK-color) */
}
#homelinks a:hover {
color: #808080 /* var(--MENU-HOME-LINK-HOVER-color) */;
}
#body a.highlight:after {
background-color: #486ac9; /* var(--MAIN-LINK-color) */
}
#body a.highlight:hover:after {
background-color: #202891; /* var(--MAIN-LINK-HOVER-color) */
}
.progress {
background-color: #ffffff; /* var(--MAIN-BG-color) */
}
.btn {
background-color: rgba( 128, 128, 128, 1 ); /* var(--BOX-NEUTRAL-color) */
}
.btn > * {
border-color: rgba( 128, 128, 128, 1 ); /* var(--BOX-NEUTRAL-color) */
color: rgba( 255, 255, 255, 1 ); /* var(--BOX-CAPTION-color) */
}
.btn > *:hover,
.btn > *:focus,
.btn > *:active {
background-color: rgba( 255, 255, 255, .833 ); /* var(--BOX-BG-color) */
color: rgba( 16, 16, 16, 1 ); /* var(--BOX-NEUTRAL-TEXT-color) */
}
.btn.cstyle.info {
background-color: rgba( 48, 117, 229, 1 ); /* var(--BOX-INFO-color) */
}
.btn.cstyle.info > * {
border-color: rgba( 48, 117, 229, 1 ); /* var(--BOX-INFO-color) */
}
.btn.cstyle.note {
background-color: rgba( 237, 153, 9, 1 ); /* var(--BOX-NOTE-color) */
}
.btn.cstyle.note > * {
border-color: rgba( 237, 153, 9, 1 ); /* var(--BOX-NOTE-color) */
}
.btn.cstyle.tip {
background-color: rgba( 42, 178, 24, 1 ); /* var(--BOX-TIP-color) */
}
.btn.cstyle.tip > * {
border-color: rgba( 42, 178, 24, 1 ); /* var(--BOX-TIP-color) */
}
.btn.cstyle.warning {
background-color: rgba( 224, 62, 62, 1 ); /* var(--BOX-WARNING-color) */
}
.btn.cstyle.warning > * {
border-color: rgba( 224, 62, 62, 1 ); /* var(--BOX-WARNING-color) */
}
.btn.cstyle.primary {
background-color: #7dc903; /* var(--PRIMARY-color) */
}
.btn.cstyle.primary > * {
border-color: #7dc903; /* var(--PRIMARY-color) */
}
.btn.cstyle.secondary {
background-color: #486ac9; /* var(--SECONDARY-color) */
}
.btn.cstyle.secondary > * {
border-color: #486ac9; /* var(--SECONDARY-color) */
}
.btn.cstyle.accent {
background-color: #ff88ff; /* var(--ACCENT-color) */
}
.btn.cstyle.accent > * {
border-color: #ff88ff; /* var(--ACCENT-color) */
}
.btn.cstyle.blue {
background-color: rgba( 48, 117, 229, 1 ); /* var(--BOX-BLUE-color) */
}
.btn.cstyle.blue > * {
border-color: rgba( 48, 117, 229, 1 ); /* var(--BOX-BLUE-color) */
}
.btn.cstyle.green {
background-color: rgba( 42, 178, 24, 1 ); /* var(--BOX-GREEN-color) */
}
.btn.cstyle.green > * {
border-color: rgba( 42, 178, 24, 1 ); /* var(--BOX-GREEN-color) */
}
.btn.cstyle.grey {
background-color: rgba( 128, 128, 128, 1 ); /* var(--BOX-GREY-color) */
}
.btn.cstyle.grey > * {
border-color: rgba( 128, 128, 128, 1 ); /* var(--BOX-GREY-color) */
}
.btn.cstyle.orange {
background-color: rgba( 237, 153, 9, 1 ); /* var(--BOX-ORANGE-color) */
}
.btn.cstyle.orange > * {
border-color: rgba( 237, 153, 9, 1 ); /* var(--BOX-ORANGE-color) */
}
.btn.cstyle.red {
background-color: rgba( 224, 62, 62, 1 ); /* var(--BOX-RED-color) */
}
.btn.cstyle.red > * {
border-color: rgba( 224, 62, 62, 1 ); /* var(--BOX-RED-color) */
}
.btn.cstyle.transparent {
background-color: transparent;
color: #101010; /* var(--MAIN-TEXT-color) */
}
.btn.cstyle.transparent:hover,
.btn.cstyle.transparent:focus,
.btn.cstyle.transparent:active {
background-color: rgba( 128, 128, 128, 1 ); /* var(--BOX-NEUTRAL-color) */
}
.btn.cstyle.transparent > * {
color: #4a4a4a; /* var(--MAIN-TITLES-TEXT-color) */
}
#body .tags a.tag-link {
background-color: #7dc903; /* var(--TAG-BG-color) */
color: #ffffff; /* var(--MAIN-BG-color) */
margin-right: 16px;
}
#body .tags a.tag-link:before {
border-right-color: #7dc903; /* var(--TAG-BG-color) */
}
#body .tags a.tag-link:after {
background: #ffffff; /* var(--MAIN-BG-color) */
}
#body .tab-nav-button.active {
background-color: #ffffff !important; /* var(--MAIN-BG-color) */
border-bottom-color: #ffffff !important; /* var(--MAIN-BG-color) */
}
.badge > * {
border-color: rgba( 16, 16, 16, 1 ); /* var(--BOX-TEXT-color) */
}
.badge > .badge-content {
background-color: rgba( 128, 128, 128, 1 ); /* var(--INTERNAL-BOX-NEUTRAL-color) */
color: rgba( 255, 255, 255, 1 ); /* var(--BOX-CAPTION-color) */
}
.badge.info > .badge-content {
background-color: rgba( 48, 117, 229, 1 ); /* var(--INTERNAL-BOX-INFO-color) */
}
.badge.warning > .badge-content {
background-color: rgba( 224, 62, 62, 1 ); /* var(--INTERNAL-BOX-WARNING-color) */
}
.badge.note > .badge-content {
background-color: rgba( 237, 153, 9, 1 ); /* var(--INTERNAL-BOX-NOTE-color) */
}
.badge.tip > .badge-content {
background-color: rgba( 42, 178, 24, 1 ); /* var(--INTERNAL-BOX-TIP-color) */
}
.badge.primary > .badge-content {
background-color: #7dc903; /* var(--INTERNAL-PRIMARY-color) */
}
.badge.secondary > .badge-content {
background-color: #486ac9; /* var(--INTERNAL-SECONDARY-color) */
}
.badge.accent > .badge-content {
background-color: #ff88ff; /* var(--INTERNAL-ACCENT-color) */
}
.badge.blue > .badge-content {
background-color: rgba( 48, 117, 229, 1 ); /* var(--INTERNAL-BOX-BLUE-color) */
}
.badge.green > .badge-content {
background-color: rgba( 42, 178, 24, 1 ); /* var(--INTERNAL-BOX-GREEN-color) */
}
.badge.grey > .badge-content {
background-color: rgba( 128, 128, 128, 1 ); /* var(--INTERNAL-BOX-GREY-color) */
}
.badge.orange > .badge-content {
background-color: rgba( 237, 153, 9, 1 ); /* var(--INTERNAL-BOX-ORANGE-color) */
}
.badge.red > .badge-content {
background-color: rgba( 224, 62, 62, 1 ); /* var(--INTERNAL-BOX-RED-color) */
}
.badge.transparent > .badge-content {
background-color: transparent;
color: #4a4a4a; /* var(--MAIN-TITLES-TEXT-color) */
}
article ul li input[type="checkbox"] {
background-color: #ffffff; /* var(--INTERNAL-MAIN-BG-color); */
color: #101010; /* var(--INTERNAL-MAIN-TEXT-color) */
}
article ul li input[type="checkbox"]::before {
box-shadow: inset 1em 1em #7dc903; /* var(--INTERNAL-PRIMARY-color) */
}
/* set further styles to fix broken stuff in IE11 */
/* turn off animiation in IE because this causes the menu
to move in from the left on every page load */
.default-animation{
transition: none;
}
/* our silly dinosaur browser wants to have the real colors */
#header-wrapper {
background-color: #7dc903; /* var(--MENU-HEADER-BG-color) */
border-bottom-color: #7dc903; /* var(--MENU-HEADER-BORDER-color) */
}
/* clears the 'X' from Internet Explorer's search input */
input[type=search]::-ms-clear { display: none; width : 0; height: 0; }
input[type=search]::-ms-reveal { display: none; width : 0; height: 0; }
/* turn off variant selector as it uses modern stuff; don't change
order with block below */
.showVariantSwitch{
display: getamodernbrowser;
}
/* dumb IE11 doesn't understand initial, so we force a fallback here */
.showLangSwitch,
.showVisitedLinks,
.showFooter {
display: block;
}
.select-style select::-ms-expand {
/* hide the triangle */
display: none;
}
}

260
docs/public/css/nucleus.css Normal file
View File

@ -0,0 +1,260 @@
*, *::before, *::after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box; }
@-webkit-viewport {
width: device-width; }
@-moz-viewport {
width: device-width; }
@-ms-viewport {
width: device-width; }
@-o-viewport {
width: device-width; }
@viewport {
width: device-width; }
html {
font-size: 16px;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%; }
body {
margin: 0; }
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block; }
audio,
canvas,
progress,
video {
display: inline-block;
vertical-align: baseline; }
audio:not([controls]) {
display: none;
height: 0; }
[hidden],
template {
display: none; }
a {
background: transparent;
text-decoration: none; }
a:active,
a:hover {
outline: 0; }
abbr[title] {
border-bottom: 1px dotted; }
b,
strong {
font-weight: bold; }
dfn {
font-style: italic; }
sub,
sup {
font-size: 0.8rem;
line-height: 0;
position: relative;
vertical-align: baseline; }
sup {
top: -0.5em; }
sub {
bottom: -0.25em; }
img {
border: 0;
max-width: 100%; }
svg:not(:root) {
overflow: hidden; }
figure {
margin: 1em 40px; }
hr {
height: 0; }
pre {
overflow: auto; }
button,
input,
optgroup,
select,
textarea {
color: inherit;
font: inherit;
margin: 0; }
button {
overflow: visible; }
button,
select {
text-transform: none; }
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer; }
button[disabled],
html input[disabled] {
cursor: default; }
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0; }
input {
line-height: normal; }
input[type="checkbox"],
input[type="radio"] {
padding: 0; }
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto; }
input[type="search"] {
-webkit-appearance: textfield; }
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none; }
legend {
border: 0;
padding: 0; }
textarea {
overflow: auto; }
optgroup {
font-weight: bold; }
table {
border-collapse: collapse;
border-spacing: 0;
table-layout: fixed;
width: 100%; }
tr, td, th {
vertical-align: middle; }
th, td {
padding: 0.425rem 0; }
th {
text-align: start; }
p {
margin: 1rem 0; }
ul, ol {
margin-top: 1rem;
margin-bottom: 1rem; }
ul ul, ul ol, ol ul, ol ol {
margin-top: 0;
margin-bottom: 0; }
blockquote {
margin: 1.5rem 0;
padding-inline-start: 0.85rem; }
cite {
display: block;
font-size: 0.925rem; }
cite:before {
content: "\2014 \0020"; }
pre {
margin: 1.5rem 0;
padding: 0.938rem; }
code {
vertical-align: bottom; }
small {
font-size: 0.925rem; }
hr {
border-left: none;
border-right: none;
border-top: none;
margin: 1.5rem 0; }
fieldset {
border: 0;
padding: 0.938rem;
margin: 0 0 1rem 0; }
input,
label,
select {
display: block; }
label {
margin-bottom: 0.425rem; }
label.required:after {
content: "*"; }
label abbr {
display: none; }
textarea, input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="url"], input[type="color"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"], select[multiple=multiple] {
-webkit-transition: border-color;
-moz-transition: border-color;
transition: border-color;
border-radius: 0.1875rem;
margin-bottom: 0.85rem;
padding: 0.425rem 0.425rem;
width: 100%; }
textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus {
outline: none; }
textarea {
resize: vertical; }
input[type="checkbox"], input[type="radio"] {
display: inline;
margin-right: 0.425rem; }
input[type="file"] {
width: 100%; }
select {
width: auto;
max-width: 100%;
margin-bottom: 1rem; }
button,
input[type="submit"] {
cursor: pointer;
user-select: none;
white-space: nowrap;
border: inherit; }

View File

@ -0,0 +1 @@
.ps{overflow:hidden!important;overflow-anchor:none;-ms-overflow-style:none;touch-action:auto;-ms-touch-action:auto}.ps__rail-x{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;height:15px;bottom:0;position:absolute}.ps__rail-y{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;position:absolute}.ps--active-x>.ps__rail-x,.ps--active-y>.ps__rail-y{display:block;background-color:transparent}.ps--focus>.ps__rail-x,.ps--focus>.ps__rail-y,.ps--scrolling-x>.ps__rail-x,.ps--scrolling-y>.ps__rail-y,.ps:hover>.ps__rail-x,.ps:hover>.ps__rail-y{opacity:.6}.ps .ps__rail-x.ps--clicking,.ps .ps__rail-x:focus,.ps .ps__rail-x:hover,.ps .ps__rail-y.ps--clicking,.ps .ps__rail-y:focus,.ps .ps__rail-y:hover{background-color:#eee;opacity:.9}.ps__thumb-x{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,height .2s ease-in-out;-webkit-transition:background-color .2s linear,height .2s ease-in-out;height:6px;bottom:2px;position:absolute}.ps__thumb-y{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,width .2s ease-in-out;-webkit-transition:background-color .2s linear,width .2s ease-in-out;width:6px;right:2px;position:absolute}.ps__rail-x.ps--clicking .ps__thumb-x,.ps__rail-x:focus>.ps__thumb-x,.ps__rail-x:hover>.ps__thumb-x{background-color:#999;height:11px}.ps__rail-y.ps--clicking .ps__thumb-y,.ps__rail-y:focus>.ps__thumb-y,.ps__rail-y:hover>.ps__thumb-y{background-color:#999;width:11px}@supports (-ms-overflow-style:none){.ps{overflow:auto!important}}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.ps{overflow:auto!important}}

View File

@ -0,0 +1 @@
@import "format-print.css";

62
docs/public/css/tabs.css Normal file
View File

@ -0,0 +1,62 @@
#body .tab-panel{
margin-bottom: 1.5rem;
margin-top: 1.5rem;
}
#body .tab-nav-button{
background-color: rgba( 134, 134, 134, .166 );
border-color: rgba( 134, 134, 134, .333 );
border-radius: 4px 4px 0 0;
border-style: solid;
border-width: 1px;
bottom: -1px;
-webkit-print-color-adjust: exact;
color-adjust: exact;
display: block;
float: left;
font-size: .9rem;
font-weight: 500;
line-height: 1.42857143;
margin-inline-start: 4px;
padding: 6px 12px;
position: relative;
}
#body .tab-nav-button.direction-rtl{
float: right;
}
#body .tab-nav-button:first-child{
margin-inline-start: 9px;
}
#body .tab-nav-button:not(.active){
border-bottom-color: rgba( 134, 134, 134, .1 );
margin-top: 8px;
padding-bottom: 2px !important;
padding-top: 2px !important;
}
#body .tab-nav-button:not(.active) span{
opacity: .8;
}
#body .tab-content{
background-color: transparent;
border-color: rgba( 134, 134, 134, .333 );
border-style: solid;
border-width: 1px;
clear: both;
-webkit-print-color-adjust: exact;
color-adjust: exact;
display: block;
padding: 8px;
z-index: 10;
}
#body .tab-content-text{
display: none;
}
#body .tab-content-text.active{
display: block;
}
#body .tab-content-text pre{
margin-bottom: 0;
margin-top: 0;
}

46
docs/public/css/tags.css Normal file
View File

@ -0,0 +1,46 @@
/* Tags */
#head-tags{
margin-left:1rem;
margin-top:1rem;
}
#body .tags a.tag-link {
border-bottom-right-radius: 3px;
border-top-right-radius: 3px;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
display: inline-block;
font-size: 0.8em;
font-weight: 400;
line-height: 2em;
margin: 0 0 8px -1px;
margin-inline-end: 16px;
padding: 0 10px 0 12px;
position: relative;
}
#body .tags a.tag-link:before {
border-color: transparent;
border-style: solid;
border-width: 1em 1em 1em 0;
content: "";
left: -1em;
height: 0;
position: absolute;
top:0;
width: 0;
}
#body .tags a.tag-link:after {
border-radius: 100%;
content: "";
left: 1px;
height: 5px;
position: absolute;
top: 10px;
width: 5px;
}
#body .tags a.tag-link:hover:after {
width: 5px;
}

View File

@ -0,0 +1,2 @@
@import "theme-relearn-light.css" screen;
@import "theme-relearn-dark.css" screen and (prefers-color-scheme: dark);

View File

@ -0,0 +1,49 @@
/* here in this showcase we use our own modified chroma syntax highlightning style;
if you want to use a predefined style instead:
- remove `markup.highlight.noClasses` from your config.toml
- set `markup.highlight.style` to a predefined style name in your config.toml
- remove the following `@import` of the self-defined chroma stylesheet */
@import "chroma-learn.css";
:root {
--MAIN-TEXT-color: #323232; /* Color of text by default */
--MAIN-TITLES-TEXT-color: #5e5e5e; /* Color of titles h2-h3-h4-h5-h6 */
--MAIN-TITLES-H1-color: #222222; /* text color of h1 titles */
--MAIN-LINK-color: #1c90f3; /* Color of links */
--MAIN-LINK-HOVER-color: #167ad0; /* Color of hovered links */
--MAIN-BG-color: #ffffff; /* color of text by default */
/* adjusted to base16-snazzy chroma style */
--CODE-BLOCK-color: #e2e4e5; /* fallback color for code text */
--CODE-BLOCK-BG-color: #282a36; /* fallback color for code background */
--CODE-BLOCK-BORDER-color: #282a36; /* color of block code border */
--CODE-INLINE-color: #5e5e5e; /* color for inline code text */
--CODE-INLINE-BG-color: #fffae9; /* color for inline code background */
--CODE-INLINE-BORDER-color: #f8e8c8; /* color of inline code border */
--MENU-HOME-LINK-color: #2d363f; /* Color of the home button text */
--MENU-HOME-LINK-HOVER-color: #000000; /* Color of the hovered home button text */
--MENU-HEADER-BG-color: #1c90f3; /* Background color of menu header */
--MENU-HEADER-BORDER-color: #33a1ff; /*Color of menu header border */
--MENU-SEARCH-color: #ffffff; /* Color of search field text */
--MENU-SEARCH-BG-color: #167ad0; /* Search field background color (by default borders + icons) */
--MENU-SEARCH-BORDER-color: #33a1ff; /* Override search field border color */
--MENU-SECTIONS-ACTIVE-BG-color: #20272b; /* Background color of the active section and its children */
--MENU-SECTIONS-BG-color: #252c31; /* Background color of other sections */
--MENU-SECTIONS-LINK-color: #ccc; /* Color of links in menu */
--MENU-SECTIONS-LINK-HOVER-color: #e6e6e6; /* Color of links in menu, when hovered */
--MENU-SECTION-ACTIVE-CATEGORY-color: #777; /* Color of active category text */
--MENU-SECTION-ACTIVE-CATEGORY-BG-color: #fff; /* Color of background for the active category (only) */
--MENU-VISITED-color: #1c90f3; /* Color of 'page visited' icons in menu */
--MENU-SECTION-HR-color: #20272b; /* Color of <hr> separator in menu */
/* base styling for boxes */
--BOX-CAPTION-color: rgba( 255, 255, 255, 1 ); /* color of the title text */
--BOX-BG-color: rgba( 255, 255, 255, .833 ); /* color of the content background */
--BOX-TEXT-color: rgba( 16, 16, 16, 1 ); /* fixed color of the content text */
}

View File

@ -0,0 +1,49 @@
/* here in this showcase we use our own modified chroma syntax highlightning style;
if you want to use a predefined style instead:
- remove `markup.highlight.noClasses` from your config.toml
- set `markup.highlight.style` to a predefined style name in your config.toml
- remove the following `@import` of the self-defined chroma stylesheet */
@import "chroma-learn.css";
:root {
--MAIN-TEXT-color: #323232; /* Color of text by default */
--MAIN-TITLES-TEXT-color: #5e5e5e; /* Color of titles h2-h3-h4-h5-h6 */
--MAIN-TITLES-H1-color: #222222; /* text color of h1 titles */
--MAIN-LINK-color: #599a3e; /* Color of links */
--MAIN-LINK-HOVER-color: #3f6d2c; /* Color of hovered links */
--MAIN-BG-color: #ffffff; /* color of text by default */
/* adjusted to base16-snazzy chroma style */
--CODE-BLOCK-color: #e2e4e5; /* fallback color for code text */
--CODE-BLOCK-BG-color: #282a36; /* fallback color for code background */
--CODE-BLOCK-BORDER-color: #282a36; /* color of block code border */
--CODE-INLINE-color: #5e5e5e; /* color for inline code text */
--CODE-INLINE-BG-color: #fffae9; /* color for inline code background */
--CODE-INLINE-BORDER-color: #f8e8c8; /* color of inline code border */
--MENU-HOME-LINK-color: #2e3b2e; /* Color of the home button text */
--MENU-HOME-LINK-HOVER-color: #000000; /* Color of the hovered home button text */
--MENU-HEADER-BG-color: #74b559; /* Background color of menu header */
--MENU-HEADER-BORDER-color: #9cd484; /*Color of menu header border */
--MENU-SEARCH-color: #ffffff; /* Color of search field text */
--MENU-SEARCH-BG-color: #599a3e; /* Search field background color (by default borders + icons) */
--MENU-SEARCH-BORDER-color: #84c767; /* Override search field border color */
--MENU-SECTIONS-ACTIVE-BG-color: #1b211c; /* Background color of the active section and its children */
--MENU-SECTIONS-BG-color: #222723; /* Background color of other sections */
--MENU-SECTIONS-LINK-color: #ccc; /* Color of links in menu */
--MENU-SECTIONS-LINK-HOVER-color: #e6e6e6; /* Color of links in menu, when hovered */
--MENU-SECTION-ACTIVE-CATEGORY-color: #777; /* Color of active category text */
--MENU-SECTION-ACTIVE-CATEGORY-BG-color: #fff; /* Color of background for the active category (only) */
--MENU-VISITED-color: #599a3e; /* Color of 'page visited' icons in menu */
--MENU-SECTION-HR-color: #18211c; /* Color of <hr> separator in menu */
/* base styling for boxes */
--BOX-CAPTION-color: rgba( 255, 255, 255, 1 ); /* color of the title text */
--BOX-BG-color: rgba( 255, 255, 255, .833 ); /* color of the content background */
--BOX-TEXT-color: rgba( 16, 16, 16, 1 ); /* fixed color of the content text */
}

View File

@ -0,0 +1,60 @@
/* here in this showcase we use our own modified chroma syntax highlightning style;
if you want to use a predefined style instead:
- remove `markup.highlight.noClasses` from your config.toml
- set `markup.highlight.style` to a predefined style name in your config.toml
- remove the following `@import` of the self-defined chroma stylesheet */
@import "chroma-learn.css";
:root {
--MAIN-TEXT-color: #323232; /* Color of text by default */
--MAIN-TITLES-TEXT-color: #5e5e5e; /* Color of titles h2-h3-h4-h5-h6 */
--MAIN-TITLES-H1-color: #222222; /* text color of h1 titles */
--MAIN-LINK-color: #00bdf3; /* Color of links */
--MAIN-LINK-HOVER-color: #0082a7; /* Color of hovered links */
--MAIN-BG-color: #ffffff; /* color of text by default */
/* adjusted to base16-snazzy chroma style */
--CODE-BLOCK-color: #e2e4e5; /* fallback color for code text */
--CODE-BLOCK-BG-color: #282a36; /* fallback color for code background */
--CODE-BLOCK-BORDER-color: #282a36; /* color of block code border */
--CODE-INLINE-color: #5e5e5e; /* color for inline code text */
--CODE-INLINE-BG-color: #fff7dd; /* color for inline code background */
--CODE-INLINE-BORDER-color: #fbf0cb; /* color of inline code border */
--MENU-HOME-LINK-color: #e0e0e0; /* Color of the home button text */
--MENU-HOME-LINK-HOVER-color: #f0f0f0; /* Color of the hovered home button text */
--MENU-HEADER-BG-color: #8451a1; /* Background color of menu header */
--MENU-HEADER-BORDER-color: #9c6fb6; /*Color of menu header border */
--MENU-SEARCH-color: #ffffff; /* Color of search field text */
--MENU-SEARCH-BG-color: #764890; /* Search field background color (by default borders + icons) */
--MENU-SEARCH-BORDER-color: #915eae; /* Override search field border color */
--MENU-SECTIONS-ACTIVE-BG-color: #251f29; /* Background color of the active section and its children */
--MENU-SECTIONS-BG-color: #322a38; /* Background color of other sections */
--MENU-SECTIONS-LINK-color: #cccccc; /* Color of links in menu */
--MENU-SECTIONS-LINK-HOVER-color: #e6e6e6; /* Color of links in menu, when hovered */
--MENU-SECTION-ACTIVE-CATEGORY-color: #777777; /* Color of active category text */
--MENU-SECTION-ACTIVE-CATEGORY-BG-color: #ffffff; /* Color of background for the active category (only) */
--MENU-VISITED-color: #00bdf3; /* Color of 'page visited' icons in menu */
--MENU-SECTION-HR-color: #2a232f; /* Color of <hr> separator in menu */
/* base styling for boxes */
--BOX-CAPTION-color: rgba( 255, 255, 255, 1 ); /* color of the title text */
--BOX-BG-color: rgba( 255, 255, 255, .833 ); /* color of the content background */
--BOX-TEXT-color: rgba( 16, 16, 16, 1 ); /* fixed color of the content text */
}
body a#logo,
body #logo svg,
body #logo svg * {
color: var(--INTERNAL-MENU-SEARCH-color);
fill: var(--INTERNAL-MENU-SEARCH-color) !important;
}
body a#logo:hover {
color: var(--INTERNAL-MENU-SEARCH-color);
}

View File

@ -0,0 +1,308 @@
/* here in this showcase we use our own modified chroma syntax highlightning style;
if you want to use a predefined style instead:
- remove `markup.highlight.noClasses` from your config.toml
- set `markup.highlight.style` to a predefined style name in your config.toml
- remove the following `@import` of the self-defined chroma stylesheet */
@import "chroma-neon.css";
/* this variant does not work well if we use fallback styles for IE11 so better
ignore this variant in IE completely */
@supports not (-ms-high-contrast:none) {
:root {
--PRIMARY-color: #f300b2; /* brand primary color */
--SECONDARY-color: #1c90f3; /* brand secondary color */
--ACCENT-color: #ffff00; /* brand accent color, used for search highlights */
--MAIN-TEXT-color: #e0e0e0; /* text color of content and h1 titles */
--MAIN-LINK-HOVER-color: #4cabff; /* hovered link color of content */
--MAIN-BG-color: #202020; /* background color of content */
/* optional overwrites for specific headers */
--MAIN-TITLES-TEXT-color: #f300b2; /* text color of h2-h6 titles and transparent box titles */
--MAIN-TITLES-H3-color: #00f3d3; /* text color of h3-h6 titles */
--MAIN-TITLES-H4-color: #ffff00; /* text color of h4-h6 titles */
/* adjusted to neon chroma style */
--CODE-BLOCK-color: #f8f8f2; /* fallback text color of block code; should be adjusted to your selected chroma style */
--CODE-BLOCK-BG-color: #000000; /* fallback background color of block code; should be adjusted to your selected chroma style */
--CODE-INLINE-color: #82e550; /* text color of inline code */
--CODE-INLINE-BG-color: #282a36; /* background color of inline code */
--CODE-INLINE-BORDER-color: #464646; /* border color of inline code */
--MERMAID-theme: dark; /* name of the default Mermaid theme for this variant, can be overridden in config.toml */
--SWAGGER-theme: dark; /* name of the default Swagger theme for this variant, can be overridden in config.toml */
--MENU-HEADER-BG-color: rgba( 0, 0, 0, 0 ); /* background color of menu header */
--MENU-HOME-LINK-color: #ffffff; /* home button color if configured */
--MENU-HOME-LINK-HOVER-color: #d0d0d0; /* hovered home button color if configured */
--MENU-SEARCH-color: #f8f8f8; /* text and icon color of search box */
--MENU-SEARCH-BG-color: rgba( 16, 16, 16, .6 ); /* background color of search box */
--MENU-SEARCH-BORDER-color: #e8e8e8; /* border color of search box */
--MENU-SECTIONS-BG-color: linear-gradient( 165deg, #f300b2d3 0%, #1c90f3b3 65%, #00e3d3b3 100% ); /* background of the menu; this is NOT just a color value but can be a complete CSS background definition including gradients, etc. */
--MENU-SECTIONS-ACTIVE-BG-color: rgba( 0, 0, 0, .166 ); /* background color of the active menu section */
--MENU-SECTIONS-LINK-color: #ffffff; /* link color of menu topics */
--MENU-SECTIONS-LINK-HOVER-color: #d0d0d0; /* hovered link color of menu topics */
--MENU-SECTION-ACTIVE-CATEGORY-color: #56ffe8; /* text color of the displayed menu topic */
--MENU-SECTION-HR-color: #bababa; /* separator color of menu footer */
--MENU-VISITED-color: #33a1ff; /* icon color of visited menu topics if configured */
/* base styling for boxes */
--BOX-CAPTION-color: rgba( 240, 240, 240, 1 ); /* text color of colored box titles */
--BOX-BG-color: rgba( 20, 20, 20, 1 ); /* background color of colored boxes */
--BOX-TEXT-color: initial; /* text color of colored box content */
/* optional base colors for colored boxes as in attachments, badges, buttons and notice shortcode */
--BOX-BLUE-color: rgba( 48, 117, 229, 1 ); /* background color of blue boxes */
--BOX-BLUE-TEXT-color: var( --BOX-BLUE-color ); /* text color of blue boxes */
--BOX-GREEN-color: rgba( 42, 178, 24, 1 ); /* background color of green boxes */
--BOX-GREEN-TEXT-color: var( --BOX-GREEN-color ); /* text color of green boxes */
--BOX-GREY-color: rgba( 128, 128, 128, 1 ); /* background color of grey boxes */
--BOX-GREY-TEXT-color: var( --BOX-GREY-color ); /* text color of grey boxes */
--BOX-ORANGE-color: rgba( 237, 153, 9, 1 ); /* background color of orange boxes */
--BOX-ORANGE-TEXT-color: var( --BOX-ORANGE-color ); /* text color of orange boxes */
--BOX-RED-color: rgba( 224, 62, 62, 1 ); /* background color of red boxes */
--BOX-RED-TEXT-color: var( --BOX-RED-color ); /* text color of red boxes */
}
body a#logo,
body #logo svg,
body #logo svg * {
color: var(--INTERNAL-MENU-SEARCH-BORDER-color);
fill: var(--INTERNAL-MENU-SEARCH-BORDER-color) !important;
}
body a#logo{
color: var(--INTERNAL-MENU-SEARCH-BORDER-color);
text-shadow:
0 0 1px var(--INTERNAL-MENU-SEARCH-BORDER-color),
0 0 2px var(--INTERNAL-MENU-SEARCH-BORDER-color),
0 0 4px var(--INTERNAL-MENU-SEARCH-BORDER-color),
0 0 8px #808080,
0 0 4px var(--INTERNAL-MENU-SECTIONS-LINK-HOVER-color),
0 0 8px var(--INTERNAL-MENU-SECTIONS-LINK-HOVER-color);
}
body h1 {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 4px #fff,
0 0 8px #fff,
0 0 3px var(--INTERNAL-MAIN-TITLES-H1-color),
0 0 6px var(--INTERNAL-MAIN-TITLES-H1-color),
0 0 8px var(--INTERNAL-MAIN-TITLES-H1-color);
}
body h2 {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MAIN-TITLES-H2-color),
0 0 8px var(--INTERNAL-MAIN-TITLES-H2-color),
0 0 10px var(--INTERNAL-MAIN-TITLES-H2-color);
}
@media screen {
body:not(.print) rapi-doc::part(section-overview-title) {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MAIN-TITLES-H2-color),
0 0 8px var(--INTERNAL-MAIN-TITLES-H2-color),
0 0 10px var(--INTERNAL-MAIN-TITLES-H2-color);
}
}
body h3, body .article-subheading {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MAIN-TITLES-H3-color),
0 0 8px var(--INTERNAL-MAIN-TITLES-H3-color),
0 0 10px var(--INTERNAL-MAIN-TITLES-H3-color);
}
body h4 {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MAIN-TITLES-H4-color),
0 0 8px var(--INTERNAL-MAIN-TITLES-H4-color),
0 0 10px var(--INTERNAL-MAIN-TITLES-H4-color);
}
body h5 {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MAIN-TITLES-H5-color),
0 0 8px var(--INTERNAL-MAIN-TITLES-H5-color),
0 0 10px var(--INTERNAL-MAIN-TITLES-H5-color);
}
body h6 {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MAIN-TITLES-H6-color),
0 0 8px var(--INTERNAL-MAIN-TITLES-H6-color),
0 0 10px var(--INTERNAL-MAIN-TITLES-H5-color);
}
body #sidebar ul.collapsible-menu li.active > .toggle,
body #sidebar ul.topics li.active > a {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-color),
0 0 8px var(--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-color);
}
body #sidebar .searchbox button:hover,
body .searchbox span:hover {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MENU-SEARCH-color),
0 0 8px var(--INTERNAL-MENU-SEARCH-color);
}
body #sidebar select:hover,
body #sidebar .collapsible-menu .toggle:hover,
body #sidebar .select-container:hover,
body #sidebar a:hover,
body #sidebar button:hover {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MENU-SECTIONS-LINK-HOVER-color),
0 0 8px var(--INTERNAL-MENU-SECTIONS-LINK-HOVER-color);
}
body #homelinks a:hover {
color: #fff;
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 8px #808080,
0 0 4px var(--INTERNAL-MENU-HOME-LINK-HOVER-color),
0 0 8px var(--INTERNAL-MENU-HOME-LINK-HOVER-color);
}
body h1 a,
body h2 a,
body h3 a,
body h4 a,
body h5 a,
body h6 a,
body .anchor {
text-shadow: none;
}
body .badge,
body .btn,
body div.box {
box-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 4px #808080,
0 0 4px var(--VARIABLE-BOX-color);
}
body .badge > .badge-content,
body .btn,
body .btn > *,
body div.box > .box-label {
text-shadow:
0 0 1px #fff,
0 0 2px #fff,
0 0 4px #808080,
0 0 4px var(--VARIABLE-BOX-CAPTION-color);
}
body .badge.cstyle:not(.transparent),
body .btn.cstyle {
--VARIABLE-BOX-TEXT-color: var(--VARIABLE-BOX-CAPTION-color);
}
body .badge.cstyle.transparent,
body .btn.cstyle.transparent {
--VARIABLE-BOX-BG-color: var(--INTERNAL-BOX-BG-color);
}
body .btn.cstyle.transparent > * {
border-color: var(--VARIABLE-BOX-color);
color: var(--VARIABLE-BOX-CAPTION-color);
}
body .btn.cstyle.transparent > *:hover,
body .btn.cstyle.transparent > *:focus,
body .btn.cstyle.transparent > *:active {
background-color: var(--INTERNAL-MAIN-TITLES-TEXT-color);
color: var(--INTERNAL-MAIN-TEXT-color);
}
body .box.cstyle.transparent {
box-shadow: none;
}
@media print {
#body h1,
#body h2,
#body h3, #body .article-subheading,
#body h4,
#body h5,
#body h6 {
text-shadow: none;
}
#body .btn,
#body div.box,
#body div.box > .box-label {
box-shadow: none;
text-shadow: none;
}
}
/* if we are in print chapter preview our @media statement from
above will not apply, so we have to repeat it here */
.print #body h1,
.print #body h2,
.print #body h3, .print #body .article-subheading,
.print #body h4,
.print #body h5,
.print #body h6 {
text-shadow: none;
}
.print #body .btn,
.print #body div.box,
.print #body div.box > .box-label {
box-shadow: none;
text-shadow: none;
}
}

View File

@ -0,0 +1,49 @@
/* here in this showcase we use our own modified chroma syntax highlightning style;
if you want to use a predefined style instead:
- remove `markup.highlight.noClasses` from your config.toml
- set `markup.highlight.style` to a predefined style name in your config.toml
- remove the following `@import` of the self-defined chroma stylesheet */
@import "chroma-learn.css";
:root {
--MAIN-TEXT-color: #323232; /* Color of text by default */
--MAIN-TITLES-TEXT-color: #5e5e5e; /* Color of titles h2-h3-h4-h5-h6 */
--MAIN-TITLES-H1-color: #222222; /* text color of h1 titles */
--MAIN-LINK-color: #f31c1c; /* Color of links */
--MAIN-LINK-HOVER-color: #d01616; /* Color of hovered links */
--MAIN-BG-color: #ffffff; /* color of text by default */
/* adjusted to base16-snazzy chroma style */
--CODE-BLOCK-color: #e2e4e5; /* fallback color for code text */
--CODE-BLOCK-BG-color: #282a36; /* fallback color for code background */
--CODE-BLOCK-BORDER-color: #282a36; /* color of block code border */
--CODE-INLINE-color: #5e5e5e; /* color for inline code text */
--CODE-INLINE-BG-color: #fffae9; /* color for inline code background */
--CODE-INLINE-BORDER-color: #f8e8c8; /* color of inline code border */
--MENU-HOME-LINK-color: #382b2b; /* Color of the home button text */
--MENU-HOME-LINK-HOVER-color: #000000; /* Color of the hovered home button text */
--MENU-HEADER-BG-color: #dc1010; /* Background color of menu header */
--MENU-HEADER-BORDER-color: #e23131; /*Color of menu header border */
--MENU-SEARCH-color: #ffffff; /* Color of search field text */
--MENU-SEARCH-BG-color: #b90000; /* Search field background color (by default borders + icons) */
--MENU-SEARCH-BORDER-color: #ef2020; /* Override search field border color */
--MENU-SECTIONS-ACTIVE-BG-color: #2b2020; /* Background color of the active section and its children */
--MENU-SECTIONS-BG-color: #312525; /* Background color of other sections */
--MENU-SECTIONS-LINK-color: #ccc; /* Color of links in menu */
--MENU-SECTIONS-LINK-HOVER-color: #e6e6e6; /* Color of links in menu, when hovered */
--MENU-SECTION-ACTIVE-CATEGORY-color: #777; /* Color of active category text */
--MENU-SECTION-ACTIVE-CATEGORY-BG-color: #fff; /* Color of background for the active category (only) */
--MENU-VISITED-color: #f31c1c; /* Color of 'page visited' icons in menu */
--MENU-SECTION-HR-color: #2b2020; /* Color of <hr> separator in menu */
/* base styling for boxes */
--BOX-CAPTION-color: rgba( 255, 255, 255, 1 ); /* color of the title text */
--BOX-BG-color: rgba( 255, 255, 255, .833 ); /* color of the content background */
--BOX-TEXT-color: rgba( 16, 16, 16, 1 ); /* fixed color of the content text */
}

View File

@ -0,0 +1,48 @@
/* here in this showcase we use our own modified chroma syntax highlightning style;
if you want to use a predefined style instead:
- remove `markup.highlight.noClasses` from your config.toml
- set `markup.highlight.style` to a predefined style name in your config.toml
- remove the following `@import` of the self-defined chroma stylesheet */
@import "chroma-relearn-dark.css";
:root {
--PRIMARY-color: #7dc903; /* brand primary color */
--SECONDARY-color: #6c8ce3; /* brand secondary color */
--ACCENT-color: #ff44ff; /* brand accent color, used for search highlights */
--MAIN-TEXT-color: #e0e0e0; /* text color of content and h1 titles */
--MAIN-LINK-HOVER-color: #93b0ff; /* hovered link color of content */
--MAIN-BG-color: #202020; /* background color of content */
--MAIN-TITLES-TEXT-color: #ffffff; /* text color of h2-h6 titles and transparent box titles */
/* adjusted to relearn-dark chroma style */
--CODE-BLOCK-color: #f8f8f8; /* fallback text color of block code; should be adjusted to your selected chroma style */
--CODE-BLOCK-BG-color: #2b2b2b; /* fallback background color of block code; should be adjusted to your selected chroma style */
--CODE-INLINE-color: #82e550; /* text color of inline code */
--CODE-INLINE-BG-color: #2d2d2d; /* background color of inline code */
--CODE-INLINE-BORDER-color: #464646; /* border color of inline code */
--MERMAID-theme: dark; /* name of the default Mermaid theme for this variant, can be overridden in config.toml */
--SWAGGER-theme: dark; /* name of the default Swagger theme for this variant, can be overridden in config.toml */
--MENU-HOME-LINK-color: #404040; /* home button color if configured */
--MENU-HOME-LINK-HOVER-color: #000000; /* hovered home button color if configured */
--MENU-SEARCH-color: #e0e0e0; /* text and icon color of search box */
--MENU-SEARCH-BG-color: #323232; /* background color of search box */
--MENU-SEARCH-BORDER-color: #e0e0e0; /* border color of search box */
--MENU-SECTIONS-BG-color: #2b2b2b; /* background of the menu; this is NOT just a color value but can be a complete CSS background definition including gradients, etc. */
--MENU-SECTIONS-LINK-color: #bababa; /* link color of menu topics */
--MENU-SECTIONS-LINK-HOVER-color: #ffffff; /* hovered link color of menu topics */
--MENU-SECTIONS-ACTIVE-BG-color: #323232; /* background color of the active menu section */
--MENU-SECTION-ACTIVE-CATEGORY-color: #82e550; /* text color of the displayed menu topic */
--MENU-SECTION-HR-color: #606060; /* separator color of menu footer */
--MENU-VISITED-color: #486ac9; /* icon color of visited menu topics if configured */
--BOX-CAPTION-color: rgba( 240, 240, 240, 1 ); /* text color of colored box titles */
--BOX-BG-color: rgba( 20, 20, 20, 1 ); /* background color of colored boxes */
--BOX-TEXT-color: #e0e0e0; /* text color of colored box content */
}

View File

@ -0,0 +1,47 @@
/* here in this showcase we use our own modified chroma syntax highlightning style;
if you want to use a predefined style instead:
- remove `markup.highlight.noClasses` from your config.toml
- set `markup.highlight.style` to a predefined style name in your config.toml
- remove the following `@import` of the self-defined chroma stylesheet */
@import "chroma-relearn-light.css";
:root {
--PRIMARY-color: #7dc903; /* brand primary color */
--SECONDARY-color: #486ac9; /* brand secondary color */
--ACCENT-color: #ff88ff; /* brand accent color, used for search highlights */
--MAIN-TEXT-color: #101010; /* text color of content and h1 titles */
--MAIN-LINK-HOVER-color: #202891; /* hovered link color of content */
--MAIN-BG-color: #ffffff; /* background color of content */
--MAIN-TITLES-TEXT-color: #4a4a4a; /* text color of h2-h6 titles and transparent box titles */
/* adjusted to relearn-light chroma style */
--CODE-BLOCK-color: #000000; /* fallback text color of block code; should be adjusted to your selected chroma style */
--CODE-BLOCK-BG-color: #f8f8f8; /* fallback background color of block code; should be adjusted to your selected chroma style */
--CODE-BLOCK-BORDER-color: #d8d8d8; /* border color of block code */
--CODE-INLINE-color: #5e5e5e; /* text color of inline code */
--CODE-INLINE-BG-color: #fffae9; /* background color of inline code */
--CODE-INLINE-BORDER-color: #f8e8c8; /* border color of inline code */
--MERMAID-theme: default; /* name of the default Mermaid theme for this variant, can be overridden in config.toml */
--SWAGGER-theme: light; /* name of the default Swagger theme for this variant, can be overridden in config.toml */
--MENU-HOME-LINK-color: #404040; /* home button color if configured */
--MENU-HOME-LINK-HOVER-color: #000000; /* hovered home button color if configured */
--MENU-SEARCH-color: #e0e0e0; /* text and icon color of search box */
--MENU-SEARCH-BG-color: #323232; /* background color of search box */
--MENU-SEARCH-BORDER-color: #e0e0e0; /* border color of search box */
--MENU-SECTIONS-BG-color: #282828; /* background of the menu; this is NOT just a color value but can be a complete CSS background definition including gradients, etc. */
--MENU-SECTIONS-ACTIVE-BG-color: rgba( 0, 0, 0, .166 ); /* background color of the active menu section */
--MENU-SECTIONS-LINK-color: #bababa; /* link color of menu topics */
--MENU-SECTIONS-LINK-HOVER-color: #ffffff; /* hovered link color of menu topics */
--MENU-SECTION-ACTIVE-CATEGORY-color: #444444; /* text color of the displayed menu topic */
--MENU-SECTION-HR-color: #606060; /* separator color of menu footer */
--BOX-CAPTION-color: rgba( 255, 255, 255, 1 ); /* text color of colored box titles */
--BOX-BG-color: rgba( 255, 255, 255, .833 ); /* background color of colored boxes */
--BOX-TEXT-color: rgba( 16, 16, 16, 1 ); /* text color of colored box content */
}

View File

@ -0,0 +1,3 @@
/* this file is here for compatiblity with older installations
use theme-relearn-light instead */
@import "theme-relearn-light.css";

1752
docs/public/css/theme.css Normal file

File diff suppressed because it is too large Load Diff

468
docs/public/css/variant.css Normal file
View File

@ -0,0 +1,468 @@
:root {
/* initially use section background to avoid flickering on load when a non default variant is active;
this is only possible because every color variant defines this variable, otherwise we would have been lost */
--INTERNAL-PRIMARY-color: var(--PRIMARY-color, var(--MENU-HEADER-BG-color, rgba( 0, 0, 0, 0 ))); /* not --INTERNAL-MENU-HEADER-BG-color */
--INTERNAL-SECONDARY-color: var(--SECONDARY-color, var(--MAIN-LINK-color, #486ac9)); /* not --INTERNAL-MAIN-LINK-color */
--INTERNAL-ACCENT-color: var(--ACCENT-color, #ffff00);
--INTERNAL-MAIN-LINK-color: var(--MAIN-LINK-color, var(--SECONDARY-color, #486ac9)); /* not --INTERNAL-SECONDARY-color */
--INTERNAL-MAIN-LINK-HOVER-color: var(--MAIN-LINK-HOVER-color, var(--INTERNAL-MAIN-LINK-color));
--INTERNAL-MAIN-BG-color: var(--MAIN-BG-color, #ffffff);
--INTERNAL-MAIN-TEXT-color: var(--MAIN-TEXT-color, #101010);
--INTERNAL-MAIN-TITLES-TEXT-color: var(--MAIN-TITLES-TEXT-color, var(--INTERNAL-MAIN-TEXT-color));
--INTERNAL-MAIN-TITLES-H1-color: var(--MAIN-TITLES-H1-color, var(--INTERNAL-MAIN-TEXT-color));
--INTERNAL-MAIN-TITLES-H2-color: var(--MAIN-TITLES-H2-color, var(--INTERNAL-MAIN-TITLES-TEXT-color));
--INTERNAL-MAIN-TITLES-H3-color: var(--MAIN-TITLES-H3-color, var(--INTERNAL-MAIN-TITLES-H2-color));
--INTERNAL-MAIN-TITLES-H4-color: var(--MAIN-TITLES-H4-color, var(--INTERNAL-MAIN-TITLES-H3-color));
--INTERNAL-MAIN-TITLES-H5-color: var(--MAIN-TITLES-H5-color, var(--INTERNAL-MAIN-TITLES-H4-color));
--INTERNAL-MAIN-TITLES-H6-color: var(--MAIN-TITLES-H6-color, var(--INTERNAL-MAIN-TITLES-H5-color));
--INTERNAL-MAIN-font: var(--MAIN-font, "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif);
--INTERNAL-MAIN-TITLES-TEXT-font: var(--MAIN-TITLES-TEXT-font, var(--INTERNAL-MAIN-font));
--INTERNAL-MAIN-TITLES-H1-font: var(--MAIN-TITLES-H1-font, var(--INTERNAL-MAIN-font));
--INTERNAL-MAIN-TITLES-H2-font: var(--MAIN-TITLES-H2-font, var(--INTERNAL-MAIN-TITLES-TEXT-font));
--INTERNAL-MAIN-TITLES-H3-font: var(--MAIN-TITLES-H3-font, var(--INTERNAL-MAIN-TITLES-H2-font));
--INTERNAL-MAIN-TITLES-H4-font: var(--MAIN-TITLES-H4-font, var(--INTERNAL-MAIN-TITLES-H3-font));
--INTERNAL-MAIN-TITLES-H5-font: var(--MAIN-TITLES-H5-font, var(--INTERNAL-MAIN-TITLES-H4-font));
--INTERNAL-MAIN-TITLES-H6-font: var(--MAIN-TITLES-H6-font, var(--INTERNAL-MAIN-TITLES-H5-font));
--INTERNAL-CODE-BLOCK-color: var(--CODE-BLOCK-color, var(--MAIN-CODE-color, #000000));
--INTERNAL-CODE-BLOCK-BG-color: var(--CODE-BLOCK-BG-color, var(--MAIN-CODE-BG-color, #f8f8f8));
--INTERNAL-CODE-BLOCK-BORDER-color: var(--CODE-BLOCK-BORDER-color, var(--MAIN-CODE-BG-color, var(--INTERNAL-CODE-BLOCK-BG-color)));
--INTERNAL-CODE-INLINE-color: var(--CODE-INLINE-color, #5e5e5e);
--INTERNAL-CODE-INLINE-BG-color: var(--CODE-INLINE-BG-color, #fffae9);
--INTERNAL-CODE-INLINE-BORDER-color: var(--CODE-INLINE-BORDER-color, #fbf0cb);
--INTERNAL-CODE-font: var(--CODE-font, "Consolas", menlo, monospace);
--INTERNAL-MERMAID-theme: var(--CONFIG-MERMAID-theme, var(--MERMAID-theme, var(--INTERNAL-PRINT-MERMAID-theme)));
--INTERNAL-SWAGGER-theme: var(--CONFIG-SWAGGER-theme, var(--SWAGGER-theme, var(--INTERNAL-PRINT-SWAGGER-theme)));
--INTERNAL-TAG-BG-color: var(--TAG-BG-color, var(--INTERNAL-PRIMARY-color));
--INTERNAL-MENU-HEADER-BG-color: var(--MENU-HEADER-BG-color, var(--PRIMARY-color, rgba( 0, 0, 0, 0 ))); /* not --INTERNAL-PRIMARY-color */
--INTERNAL-MENU-HEADER-BORDER-color: var(--MENU-HEADER-BORDER-color, var(--INTERNAL-MENU-HEADER-BG-color));
--INTERNAL-MENU-HOME-LINK-color: var(--MENU-HOME-LINK-color, #323232);
--INTERNAL-MENU-HOME-LINK-HOVER-color: var(--MENU-HOME-LINK-HOVER-color, var(--MENU-HOME-LINK-HOVERED-color, #808080));
--INTERNAL-MENU-SEARCH-color: var(--MENU-SEARCH-color, var(--MENU-SEARCH-BOX-ICONS-color, #e0e0e0));
--INTERNAL-MENU-SEARCH-BG-color: var(--MENU-SEARCH-BG-color, #323232);
--INTERNAL-MENU-SEARCH-BORDER-color: var(--MENU-SEARCH-BORDER-color, var(--MENU-SEARCH-BOX-color, var(--INTERNAL-MENU-SEARCH-BG-color)));
--INTERNAL-MENU-SECTIONS-ACTIVE-BG-color: var(--MENU-SECTIONS-ACTIVE-BG-color, rgba( 0, 0, 0, .166 ));
--INTERNAL-MENU-SECTIONS-BG-color: var(--MENU-SECTIONS-BG-color, #282828);
--INTERNAL-MENU-SECTIONS-LINK-color: var(--MENU-SECTIONS-LINK-color, #bababa);
--INTERNAL-MENU-SECTIONS-LINK-HOVER-color: var(--MENU-SECTIONS-LINK-HOVER-color, var(--INTERNAL-MENU-SECTIONS-LINK-color));
--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-color: var(--MENU-SECTION-ACTIVE-CATEGORY-color, #444444);
--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-BG-color: var(--MENU-SECTION-ACTIVE-CATEGORY-BG-color, var(--INTERNAL-MAIN-BG-color));
--INTERNAL-MENU-VISITED-color: var(--MENU-VISITED-color, var(--INTERNAL-SECONDARY-color));
--INTERNAL-MENU-SECTION-HR-color: var(--MENU-SECTION-HR-color, #606060);
--INTERNAL-BOX-CAPTION-color: var(--BOX-CAPTION-color, rgba( 255, 255, 255, 1 ));
--INTERNAL-BOX-BG-color: var(--BOX-BG-color, rgba( 255, 255, 255, .833 ));
--INTERNAL-BOX-TEXT-color: var(--BOX-TEXT-color, var(--INTERNAL-MAIN-TEXT-color));
--INTERNAL-BOX-BLUE-color: var(--BOX-BLUE-color, rgba( 48, 117, 229, 1 ));
--INTERNAL-BOX-GREEN-color: var(--BOX-GREEN-color, rgba( 42, 178, 24, 1 ));
--INTERNAL-BOX-GREY-color: var(--BOX-GREY-color, rgba( 128, 128, 128, 1 ));
--INTERNAL-BOX-ORANGE-color: var(--BOX-ORANGE-color, rgba( 237, 153, 9, 1 ));
--INTERNAL-BOX-RED-color: var(--BOX-RED-color, rgba( 224, 62, 62, 1 ));
--INTERNAL-BOX-INFO-color: var(--BOX-INFO-color, var(--INTERNAL-BOX-BLUE-color));
--INTERNAL-BOX-NEUTRAL-color: var(--BOX-NEUTRAL-color, var(--INTERNAL-BOX-GREY-color));
--INTERNAL-BOX-NOTE-color: var(--BOX-NOTE-color, var(--INTERNAL-BOX-ORANGE-color));
--INTERNAL-BOX-TIP-color: var(--BOX-TIP-color, var(--INTERNAL-BOX-GREEN-color));
--INTERNAL-BOX-WARNING-color: var(--BOX-WARNING-color, var(--INTERNAL-BOX-RED-color));
--INTERNAL-BOX-BLUE-TEXT-color: var(--BOX-BLUE-TEXT-color, var(--INTERNAL-BOX-TEXT-color));
--INTERNAL-BOX-GREEN-TEXT-color: var(--BOX-GREEN-TEXT-color, var(--INTERNAL-BOX-TEXT-color));
--INTERNAL-BOX-GREY-TEXT-color: var(--BOX-GREY-TEXT-color, var(--INTERNAL-BOX-TEXT-color));
--INTERNAL-BOX-ORANGE-TEXT-color: var(--BOX-ORANGE-TEXT-color, var(--INTERNAL-BOX-TEXT-color));
--INTERNAL-BOX-RED-TEXT-color: var(--BOX-RED-TEXT-color, var(--INTERNAL-BOX-TEXT-color));
--INTERNAL-BOX-INFO-TEXT-color: var(--BOX-INFO-TEXT-color, var(--INTERNAL-BOX-BLUE-TEXT-color));
--INTERNAL-BOX-NEUTRAL-TEXT-color: var(--BOX-NEUTRAL-TEXT-color, var(--INTERNAL-BOX-GREY-TEXT-color));
--INTERNAL-BOX-NOTE-TEXT-color: var(--BOX-NOTE-TEXT-color, var(--INTERNAL-BOX-ORANGE-TEXT-color));
--INTERNAL-BOX-TIP-TEXT-color: var(--BOX-TIP-TEXT-color, var(--INTERNAL-BOX-GREEN-TEXT-color));
--INTERNAL-BOX-WARNING-TEXT-color: var(--BOX-WARNING-TEXT-color, var(--INTERNAL-BOX-RED-TEXT-color));
/* print style, values taken from relearn-light as it is used as a default print style */
--INTERNAL-PRINT-MERMAID-theme: var(--PRINT-MERMAID-theme, default);
--INTERNAL-PRINT-MAIN-BG-color: var(--PRINT-MAIN-BG-color, #ffffff);
--INTERNAL-PRINT-CODE-font: var(--PRINT-CODE-font, "Consolas", menlo, monospace);
--INTERNAL-PRINT-TAG-BG-color: var(--PRINT-TAG-BG-color, #7dc903);
--INTERNAL-PRINT-MAIN-font: var(--PRINT-MAIN-font, "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif);
--INTERNAL-PRINT-MAIN-TEXT-color: var(--PRINT-MAIN-TEXT-color, #101010);
--INTERNAL-PRINT-SWAGGER-theme: var(--PRINT-SWAGGER-theme, light);
}
body {
background-color: var(--INTERNAL-MAIN-BG-color);
color: var(--INTERNAL-MAIN-TEXT-color);
font-family: var(--INTERNAL-MAIN-font);
}
.footerVisitedLinks > *,
a,
.anchor,
#toc-menu,
#body a.highlight:after,
#searchresults .autocomplete-suggestion {
color: var(--INTERNAL-MAIN-LINK-color);
}
a:hover,
.anchor:hover,
#toc-menu:hover,
#body a.highlight:hover:after {
color: var(--INTERNAL-MAIN-LINK-HOVER-color);
}
#sidebar {
background: var(--INTERNAL-MENU-SECTIONS-BG-color);
}
#header-wrapper {
background-color: var(--INTERNAL-MENU-HEADER-BG-color);
border-color: var(--INTERNAL-MENU-HEADER-BORDER-color);
color: var(--INTERNAL-MENU-SEARCH-color);
}
.searchbox {
border-color: var(--INTERNAL-MENU-SEARCH-BORDER-color);
background-color: var(--INTERNAL-MENU-SEARCH-BG-color);
}
#sidebar .searchbox > :first-child,
#sidebar .searchbox button,
.searchbox span {
color: var(--INTERNAL-MENU-SEARCH-color);
}
.searchbox input::-webkit-input-placeholder,
.searchbox input::placeholder {
color: var(--INTERNAL-MENU-SEARCH-color);
}
#sidebar .collapsible-menu .toggle,
#sidebar .select-container,
#sidebar a,
#sidebar button {
color: var(--INTERNAL-MENU-SECTIONS-LINK-color);
}
#sidebar select:hover,
#sidebar .collapsible-menu .toggle:hover,
#sidebar .select-container:hover,
#sidebar a:hover,
#sidebar button:hover {
color: var(--INTERNAL-MENU-SECTIONS-LINK-HOVER-color);
}
#sidebar ul.topics > li.parent,
#sidebar ul.topics > li.active {
background-color: var(--INTERNAL-MENU-SECTIONS-ACTIVE-BG-color);
}
#sidebar ul.collapsible-menu li.active > .toggle,
#sidebar ul.topics li.active > a {
color: var(--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-color);
}
#sidebar ul.topics li.active > a {
background-color: var(--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-BG-color);
}
#sidebar ul li.visited > a .read-icon {
color: var(--INTERNAL-MENU-VISITED-color);
}
#sidebar .nav-title {
color: var(--INTERNAL-MENU-SECTIONS-LINK-HOVER-color);
}
#sidebar hr {
border-color: var(--INTERNAL-MENU-SECTION-HR-color);
}
#footer {
color: var(--INTERNAL-MENU-SECTIONS-LINK-color);
}
mark {
background-color: var(--INTERNAL-ACCENT-color);
}
h1 {
color: var(--INTERNAL-MAIN-TITLES-H1-color);
font-family: var(--INTERNAL-MAIN-TITLES-H1-font);
}
h2 {
color: var(--INTERNAL-MAIN-TITLES-H2-color);
font-family: var(--INTERNAL-MAIN-TITLES-H2-font);
}
h3, .article-subheading {
color: var(--INTERNAL-MAIN-TITLES-H3-color);
font-family: var(--INTERNAL-MAIN-TITLES-H3-font);
}
h4 {
color: var(--INTERNAL-MAIN-TITLES-H4-color);
font-family: var(--INTERNAL-MAIN-TITLES-H4-font);
}
h5 {
color: var(--INTERNAL-MAIN-TITLES-H5-color);
font-family: var(--INTERNAL-MAIN-TITLES-H5-font);
}
h6 {
color: var(--INTERNAL-MAIN-TITLES-H6-color);
font-family: var(--INTERNAL-MAIN-TITLES-H6-font);
}
div.box {
background-color: var(--VARIABLE-BOX-color);
}
div.box > .box-label {
color: var(--VARIABLE-BOX-CAPTION-color);
}
div.box > .box-content {
background-color: var(--VARIABLE-BOX-BG-color);
color: var(--VARIABLE-BOX-TEXT-color);
}
.cstyle.info {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-INFO-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-INFO-TEXT-color);
}
.cstyle.warning {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-WARNING-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-WARNING-TEXT-color);
}
.cstyle.note {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-NOTE-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-NOTE-TEXT-color);
}
.cstyle.tip {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-TIP-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-TIP-TEXT-color);
}
.cstyle.primary {
--VARIABLE-BOX-color: var(--INTERNAL-PRIMARY-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-MAIN-TEXT-color);
}
.cstyle.secondary {
--VARIABLE-BOX-color: var(--INTERNAL-SECONDARY-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-MAIN-TEXT-color);
}
.cstyle.accent {
--VARIABLE-BOX-color: var(--INTERNAL-ACCENT-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-MAIN-TEXT-color);
}
.cstyle.blue {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-BLUE-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-BLUE-TEXT-color);
}
.cstyle.green {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-GREEN-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-GREEN-TEXT-color);
}
.cstyle.grey {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-GREY-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-GREY-TEXT-color);
}
.cstyle.orange {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-ORANGE-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-ORANGE-TEXT-color);
}
.cstyle.red {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-RED-color);
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-RED-TEXT-color);
}
.cstyle.transparent {
--VARIABLE-BOX-color: transparent;
--VARIABLE-BOX-CAPTION-color: var(--INTERNAL-MAIN-TITLES-TEXT-color);
--VARIABLE-BOX-BG-color: transparent;
--VARIABLE-BOX-TEXT-color: var(--INTERNAL-MAIN-TEXT-color);
}
code,
kbd,
pre,
samp {
font-family: var(--INTERNAL-CODE-font);
}
code {
background-color: var(--INTERNAL-CODE-INLINE-BG-color);
border-color: var(--INTERNAL-CODE-INLINE-BORDER-color);
color: var(--INTERNAL-CODE-INLINE-color);
}
pre {
background-color: var(--INTERNAL-CODE-BLOCK-BG-color);
border-color: var(--INTERNAL-CODE-BLOCK-BORDER-color);
color: var(--INTERNAL-CODE-BLOCK-color);
}
table {
background-color: var(--INTERNAL-MAIN-BG-color);
}
.lightbox img{
background-color: var(--INTERNAL-MAIN-BG-color);
}
#topbar {
background-color: var(--INTERNAL-MAIN-BG-color);
}
#body a[aria-disabled="true"],
#searchresults .autocomplete-suggestion > .context {
color: var(--INTERNAL-MAIN-TEXT-color);
}
.copy-to-clipboard-button {
background-color: var(--INTERNAL-CODE-INLINE-BG-color);
border-color: var(--INTERNAL-CODE-INLINE-BORDER-color);
color: var(--INTERNAL-CODE-INLINE-color);
font-family: var(--INTERNAL-CODE-font);
}
.copy-to-clipboard-button:hover {
background-color: var(--INTERNAL-CODE-INLINE-color);
color: var(--INTERNAL-CODE-INLINE-BG-color);
}
pre .copy-to-clipboard-button {
border-color: var(--INTERNAL-CODE-BLOCK-BORDER-color);
color: var(--INTERNAL-MAIN-LINK-color);
}
pre .copy-to-clipboard-button:hover {
background-color: var(--INTERNAL-MAIN-LINK-color);
border-color: var(--INTERNAL-MAIN-LINK-color);
color: var(--INTERNAL-CODE-BLOCK-BG-color);
}
.expand > label {
color: var(--INTERNAL-MAIN-LINK-color);
}
.expand > label:hover {
color: var(--INTERNAL-MAIN-LINK-HOVER-color);
}
.expand > label:after {
background-color: var(--INTERNAL-MAIN-LINK-HOVER-color);
}
#homelinks {
background-color: var(--INTERNAL-MENU-HEADER-BORDER-color);
border-color: var(--INTERNAL-MENU-HEADER-BORDER-color);
}
#homelinks a {
color: var(--INTERNAL-MENU-HOME-LINK-color);
}
#homelinks a:hover {
color: var(--INTERNAL-MENU-HOME-LINK-HOVER-color);
}
#body a.highlight:after {
background-color: var(--INTERNAL-MAIN-LINK-color);
}
#body a.highlight:hover:after {
background-color: var(--INTERNAL-MAIN-LINK-HOVER-color);
}
.progress {
background-color: var(--INTERNAL-MAIN-BG-color);
}
.btn {
background-color: var(--VARIABLE-BOX-color);
}
.btn > * {
border-color: var(--VARIABLE-BOX-color);
color: var(--VARIABLE-BOX-CAPTION-color);
}
.btn > *:hover,
.btn > *:focus,
.btn > *:active {
background-color: var(--VARIABLE-BOX-BG-color);
color: var(--VARIABLE-BOX-TEXT-color);
}
.btn.cstyle.transparent {
--VARIABLE-BOX-BG-color: var(--INTERNAL-BOX-BG-color);
}
.btn.cstyle.transparent:hover,
.btn.cstyle.transparent:focus,
.btn.cstyle.transparent:active {
background-color: var(--INTERNAL-BOX-NEUTRAL-color);
}
.btn.cstyle.transparent > * {
--VARIABLE-BOX-color: var(--INTERNAL-BOX-NEUTRAL-color);
--VARIABLE-BOX-TEXT-color: var(--VARIABLE-BOX-CAPTION-color);
}
#body .tags a.tag-link {
background-color: var(--INTERNAL-TAG-BG-color);
color: var(--INTERNAL-MAIN-BG-color);
}
#body .tags a.tag-link:before {
border-right-color: var(--INTERNAL-TAG-BG-color);
}
#body .tags a.tag-link:after {
background-color: var(--INTERNAL-MAIN-BG-color);
}
#body .tab-nav-button.active {
background-color: var(--INTERNAL-MAIN-BG-color) !important;
border-bottom-color: var(--INTERNAL-MAIN-BG-color) !important;
}
.badge > * {
border-color: var(--VARIABLE-BOX-TEXT-color);
}
.badge > .badge-content {
background-color: var(--VARIABLE-BOX-color);
color: var(--VARIABLE-BOX-CAPTION-color);
}
.badge.cstyle.transparent{
--VARIABLE-BOX-BG-color: var(--INTERNAL-BOX-BG-color);
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Getting started on A tool for commands</title>
<link>http://example.org/getting-started/index.html</link>
<description>Recent content in Getting started on A tool for commands</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language><atom:link href="http://example.org/getting-started/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Install Backy</title>
<link>http://example.org/getting-started/install/index.html</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://example.org/getting-started/install/index.html</guid>
<description>Binaries are available from the release page. Make sure to get the correct version for your system, which supports x86_64, ARM64, and i386.
Source Install You can install from source. You will need Go installed.
Then run:
go install git.andrewnw.xyz/CyberShell/backy@master Once set, jump over to the config docs and start configuring your file.</description>
</item>
<item>
<title>Config File Definitions</title>
<link>http://example.org/getting-started/config/index.html</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>http://example.org/getting-started/config/index.html</guid>
<description>Commands The commands section is for defining commands. These can be run with or without a shell and on a host or locally.
See the commands documentation for further information.
commands: stop-docker-container: cmd: docker args: - compose - -f /some/path/to/docker-compose.yaml - down # if host is not defined, cmd will be run locally host: some-host backup-docker-container-script: cmd: /path/to/script # The host has to be defined in the config file host: some-host environment: - FOO=BAR - APP=$VAR # defined in .</description>
</item>
</channel>
</rss>

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

278
docs/public/index.html Normal file

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More