Compare commits

...

36 commits
v1.1.0 ... main

Author SHA1 Message Date
D. Moonfire ad2b594e64 chore: updating project data 2022-11-04 22:45:43 -05:00
D. Moonfire 66267252d1 refactor: rename .markdown to .md 2022-11-04 21:46:38 -05:00
D. Moonfire b91164286d chore: updating project setup 2022-10-15 13:55:44 -05:00
semantic-release-bot 1cea0c5241 chore(release): v2.0.3 [skip ci]
## [2.0.3](https://src.mfgames.com/fedran-sources/sand-and-bone/compare/v2.0.2...v2.0.3) (2022-10-15)

### Bug Fixes

* updating build ([af6f39f](af6f39f441))
2022-10-15 14:17:18 +00:00
D. Moonfire af6f39f441 fix: updating build 2022-10-15 07:35:58 -05:00
semantic-release-bot 2cbf70d512 chore(release): v2.0.2 [skip ci]
## [2.0.2](https://src.mfgames.com/fedran-sources/sand-and-bone/compare/v2.0.1...v2.0.2) (2022-10-15)

### Bug Fixes

* updated to the new build system ([65c00dc](65c00dc328))
2022-10-15 04:44:39 +00:00
D. Moonfire 65c00dc328 fix: updated to the new build system 2022-10-14 23:22:01 -05:00
semantic-release-bot c6b03885f1 chore(release): v2.0.1 [skip ci]
## [2.0.1](https://src.mfgames.com/fedran-sources/sand-and-bone/compare/v2.0.0...v2.0.1) (2022-10-13)

### Bug Fixes

* adding in standard build ([f1d2e47](f1d2e47d8e))
2022-10-13 15:04:00 +00:00
D. Moonfire f1d2e47d8e fix: adding in standard build 2022-10-13 09:00:28 -05:00
D. Moonfire 084704732e chore: updating metadata 2022-03-04 17:19:26 -06:00
D. Moonfire 6f9c2795c9 chore: updating metadata 2022-03-04 09:14:07 -06:00
D. Moonfire 6235fd2b10 build: updating sematic release settings 2020-01-05 10:14:18 -06:00
semantic-release-bot 5dcf5d5a59 chore(release): v2.0.0
# [2.0.0](https://gitlab.com/fedran/sand-and-bone/compare/v1.1.1...v2.0.0) (2020-01-02)

### Features

* switching to new Fedran theme ([9403ff8](9403ff8741))

### BREAKING CHANGES

* the new theme causes page numbers to change
2020-01-02 06:16:28 +00:00
D. Moonfire 9403ff8741 feat: switching to new Fedran theme
BREAKING CHANGE: the new theme causes page numbers to change
2020-01-02 00:14:27 -06:00
D. Moonfire eaee961937 chore: switched to the unnamed convention for pages 2019-10-16 13:54:12 -05:00
D. Moonfire ef4223584a chore: added project logo 2019-04-30 23:19:31 -05:00
semantic-release-bot f26f4bc381 chore(release): v1.1.1
## [1.1.1](https://gitlab.com/fedran/sand-and-bone/compare/v1.1.0...v1.1.1) (2019-04-16)

### Bug Fixes

* fixed a missing year ([f02422f](https://gitlab.com/fedran/sand-and-bone/commit/f02422f))
* fixed the dates to be more logical ([11d23ac](https://gitlab.com/fedran/sand-and-bone/commit/11d23ac))
2019-04-16 00:19:58 +00:00
D. Moonfire e8b08efe09 ci: updating package-lock.json 2019-04-15 19:18:33 -05:00
D. Moonfire 2c19f01688 ci: updating packages for build system 2019-04-15 19:16:37 -05:00
D. Moonfire 11d23aca70 fix: fixed the dates to be more logical 2019-01-24 14:12:14 -06:00
D. Moonfire f02422f1a2 fix: fixed a missing year 2019-01-23 22:25:03 -06:00
D. Moonfire 12f06865cf chore: adding times and dates for all chapters 2019-01-23 19:16:34 -06:00
D. Moonfire e525cd335a chore: adding date and time to chapter 1 2019-01-22 00:33:59 -06:00
D. Moonfire b9c9680961 build: putting html edition back in 2018-08-26 02:35:29 -05:00
D. Moonfire c9c2bf9937 build: fixing Git links in package.json 2018-08-26 02:30:03 -05:00
D. Moonfire c2829a398c build: updating previously entries 2018-08-26 02:16:43 -05:00
D. Moonfire 7c2fe4875a build: updating POV and volume 2018-08-26 02:07:06 -05:00
D. Moonfire 644998df93 build: updating publication packages 2018-08-26 01:56:18 -05:00
D. Moonfire 5988a03367 Update dependencies. 2018-04-17 00:29:47 -05:00
D. Moonfire 7e5294644b Adding additional metadata. 2018-04-17 00:15:50 -05:00
Dylan Moonfire 4ebf017361 Nevermind, I like the Markdown formatting more. 2018-04-11 13:37:01 -05:00
Dylan Moonfire af81434f4e Renaming files to make Gitlab happier. 2018-04-11 13:36:05 -05:00
Dylan Moonfire 76f8709ad8 Renamed various files, added a formal changelog. 2018-04-11 13:34:22 -05:00
D. Moonfire 4c4738fb3f Added support links. 2018-04-08 16:25:48 -05:00
D. Moonfire 8fee1e25b4 Added read me. 2018-04-08 12:43:01 -05:00
D. Moonfire 189d07561c Added Creative Commons BY-NC-SA 4.0 license. 2018-04-08 00:48:28 -05:00
82 changed files with 22139 additions and 1717 deletions

26
.editorconfig Normal file
View file

@ -0,0 +1,26 @@
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
max_line_length = 80
tab_width = 4
trim_trailing_whitespace = true
[*.{js,ts}]
quote_type = double
[*.yaml]
indent_size = 4
tab_width = 4
indent_style = space
[package.json]
indent_size = 2
tab_width = 2

2
.envrc Normal file
View file

@ -0,0 +1,2 @@
export PATH=$PWD/scripts:$PWD/node_modules/.bin:$PATH
use flake || use nix

43
.gitignore vendored
View file

@ -1,36 +1,13 @@
*~
*.pdf
*.mobi
*.epub
*.doc
*.rtf
*.docx
*.bak
*.fo
book*markdown
dmoonfire*markdown
dmoonfire*yaml
\#*
.#*
penflip
build/
.backup/
t/
node_modules/
.direnv/
tmp/
build/
cover-??.png
cover-??-*.png
# XML Files that are generated or copied around.
about.xml
curiouscabbit.xml
# Other generated files
abbrev.el
latex.out
# Covers
backmatter/*.jpg
.*-swp
dmoonfire*.pdf
dmoonfire*.docx
dmoonfire*.html
dmoonfire*.mobi
dmoonfire*.epub
*.bz2

View file

@ -1,63 +1,40 @@
image: dmoonfire/mfgames-writing-js:1.1.0
stages:
- review
- publish
review:
stage: review
only:
- master
tags:
- docker
script:
# Install the basic requirements including the free fonts.
- npm ci
# Corda is a non-free font that we use for the books. It was
# picked before Source Serif Pro was created and will continue to
# be used until SSP can handle proper italics. To get around this,
# we stored it in a secret location that Gitlab CI knows about but
# everyone else does not.
- wget $CORDA_FONTS_URL/$CORDA_FONTS_BZ2BALL
- tar -xjf $CORDA_FONTS_BZ2BALL
- mkdir -p ~/.fonts/
- mv *.otf ~/.fonts/
- fc-cache -rf
# We need the covers and the previous version so we can generate the
# "previously" chapter.
- mkdir -p build/repos
- git clone https://oauth2:$fedranAccessKey@gitlab.com/fedran/fedran-covers.git build/repos/fedran-covers
- git clone https://oauth2:$fedranAccessKey@gitlab.com/fedran/sand-and-ash.git build/repos/sand-and-ash
- 'echo "---" > build/previously.markdown'
- 'echo "title: Previously" >> build/previously.markdown'
- 'echo "---" >> build/previously.markdown'
- 'cat build/repos/sand-and-ash/spoilers/plot.markdown >> build/previously.markdown'
# Build the files.
- npm run build
- kindlegen *.epub
# Trigger the website to rebuild.
- "curl -X POST -F token=$fedranAccessKey -F ref=master https://gitlab.com/api/v4/projects/4027285/trigger/pipeline"
artifacts:
expire_in: 1 week
paths:
- "*.pdf"
- "*.epub"
- "*.mobi"
publish:
stage: publish
when: manual
script:
- echo Published
artifacts:
paths:
- "*.pdf"
- "*.epub"
- "*.mobi"
dependencies:
- review
image: dmoonfire/mfgames-writing-js:2.0.0
stages:
- publish
publish:
stage: publish
only: [master]
tags: [docker]
script:
# Install the basic requirements including the free fonts.
- npm ci
# Verify that the commits are good.
- npx commitlint --from=$CI_BUILD_BEFORE_SHA
# We need the covers and the previous version so we can generate the
# "previously" chapter.
- mkdir -p build/repos
- git clone https://oauth2:$fedranAccessKey@gitlab.com/fedran/fedran-covers.git build/repos/fedran-covers
- git clone https://oauth2:$fedranAccessKey@gitlab.com/fedran/sand-and-ash.git build/repos/sand-and-ash
- 'echo "---" > build/previously.markdown'
- 'echo "title: Previously" >> build/previously.markdown'
- 'echo "---" >> build/previously.markdown'
- 'cat build/repos/sand-and-ash/spoilers/plot.markdown >> build/previously.markdown'
# Trigger the release if needed.
- npx semantic-release
# Build the files.
- npm run upload
artifacts:
expire_in: 1 week
paths:
- "*.pdf"
- "*.epub"
- "*.mobi"
- "*.docx"
- "*.html"

17
.prettierignore Normal file
View file

@ -0,0 +1,17 @@
CHANGELOG.md
package-lock.json
yarn.lock
*~
archives/
build/
extras/
others/
node_modules/
submissions/
sample-edits/
maps/
.direnv/
tmp/
edit/

37
.woodpecker.yml Normal file
View file

@ -0,0 +1,37 @@
clone:
git:
image: woodpeckerci/plugin-git
settings:
tags: true
when:
event: [push, pull_request]
pipeline:
build:
image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
commands:
- nix profile install 'nixpkgs#fontconfig'
- nix develop --command scripts/build.sh
secrets:
- gitea_token
- s3_bucket
- s3_endpoint
- s3_access_key_id
- s3_secret_access_key
when:
event: [push, pull_request]
release:
image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
commands:
- nix profile install 'nixpkgs#fontconfig'
- nix develop --command scripts/release.sh
secrets:
- gitea_token
- s3_bucket
- s3_endpoint
- s3_access_key_id
- s3_secret_access_key
when:
event: push
branch: main

78
CHANGELOG.md Normal file
View file

@ -0,0 +1,78 @@
## [2.0.3](https://src.mfgames.com/fedran-sources/sand-and-bone/compare/v2.0.2...v2.0.3) (2022-10-15)
### Bug Fixes
* updating build ([af6f39f](https://src.mfgames.com/fedran-sources/sand-and-bone/commit/af6f39f4411870861bdcc32f9ed8871c8885c32f))
## [2.0.2](https://src.mfgames.com/fedran-sources/sand-and-bone/compare/v2.0.1...v2.0.2) (2022-10-15)
### Bug Fixes
* updated to the new build system ([65c00dc](https://src.mfgames.com/fedran-sources/sand-and-bone/commit/65c00dc3284a1c756a757517f72ffc36bf1fe76a))
## [2.0.1](https://src.mfgames.com/fedran-sources/sand-and-bone/compare/v2.0.0...v2.0.1) (2022-10-13)
### Bug Fixes
* adding in standard build ([f1d2e47](https://src.mfgames.com/fedran-sources/sand-and-bone/commit/f1d2e47d8e5e7a2f07f15b364d7556d8d0124739))
# [2.0.0](https://gitlab.com/fedran/sand-and-bone/compare/v1.1.1...v2.0.0) (2020-01-02)
### Features
* switching to new Fedran theme ([9403ff8](https://gitlab.com/fedran/sand-and-bone/commit/9403ff87411c437fd1e9ee6531678b2132ac237b))
### BREAKING CHANGES
* the new theme causes page numbers to change
## [1.1.1](https://gitlab.com/fedran/sand-and-bone/compare/v1.1.0...v1.1.1) (2019-04-16)
### Bug Fixes
* fixed a missing year ([f02422f](https://gitlab.com/fedran/sand-and-bone/commit/f02422f))
* fixed the dates to be more logical ([11d23ac](https://gitlab.com/fedran/sand-and-bone/commit/11d23ac))
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- Added initial `CHANGELOG.md`.
- Added initial `README.md`.
- Added initial `LICENSE.txt`.
## 1.1.0 - 2018-04-08
### Changed
- Updated the cover to match the standards from [fedran-covers](https://gitlab.com/fedran/fedran-covers/).
### Fixed
- Various typo and formatting changes.
## 1.0.1
### Updated
- `chapters/chapter-29.markdown`:
- "a warrior for some great dead" fixed "dead" to "deed".
## 1.0.0
### Added
- Initial version.
- Print version was published with Ingram with ISBN 978-1-940509-25-9.

437
LICENSE.txt Normal file
View file

@ -0,0 +1,437 @@
Attribution-NonCommercial-ShareAlike 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
Public License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-NonCommercial-ShareAlike 4.0 International Public License
("Public License"). To the extent this Public License may be
interpreted as a contract, You are granted the Licensed Rights in
consideration of Your acceptance of these terms and conditions, and the
Licensor grants You such rights in consideration of benefits the
Licensor receives from making the Licensed Material available under
these terms and conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. BY-NC-SA Compatible License means a license listed at
creativecommons.org/compatiblelicenses, approved by Creative
Commons as essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
e. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name
of a Creative Commons Public License. The License Elements of this
Public License are Attribution, NonCommercial, and ShareAlike.
h. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
i. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
k. NonCommercial means not primarily intended for or directed towards
commercial advantage or monetary compensation. For purposes of
this Public License, the exchange of the Licensed Material for
other material subject to Copyright and Similar Rights by digital
file-sharing or similar means is NonCommercial provided there is
no payment of monetary compensation in connection with the
exchange.
l. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
m. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
n. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part, for NonCommercial purposes only; and
b. produce, reproduce, and Share Adapted Material for
NonCommercial purposes only.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. Additional offer from the Licensor -- Adapted Material.
Every recipient of Adapted Material from You
automatically receives an offer from the Licensor to
exercise the Licensed Rights in the Adapted Material
under the conditions of the Adapter's License You apply.
c. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties, including when
the Licensed Material is used other than for NonCommercial
purposes.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share
Adapted Material You produce, the following conditions also apply.
1. The Adapter's License You apply must be a Creative Commons
license with the same License Elements, this version or
later, or a BY-NC-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the
Adapter's License You apply. You may satisfy this condition
in any reasonable manner based on the medium, means, and
context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms
or conditions on, or apply any Effective Technological
Measures to, Adapted Material that restrict exercise of the
rights granted under the Adapter's License You apply.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database for NonCommercial purposes
only;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material,
including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public
licenses. Notwithstanding, Creative Commons may elect to apply one of
its public licenses to material it publishes and in those instances
will be considered the “Licensor.” The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. Except for the limited purpose of indicating that
material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the
public licenses.
Creative Commons may be contacted at creativecommons.org.

37
README.md Normal file
View file

@ -0,0 +1,37 @@
# *Sand and Bone* by D. Moonfire
This is the public repository of the novel *Sand and Bone* written by [D. Moonfire](https://d.moonfire.us/). It is the third and final novel in the [Rutejìmo](https://fedran.com/rutejimo/) series. Set ten years after [Sand and Ash](https://fedran.com/sand-and-ash/), Rutejìmo has finally found his place in the world and the clan but now he is faced with his hardest trial yet, the threat of his family and everyone he loved.
To read the formatted chapters or download it in various forms, go to the [Fedran project page](https://fedran.com/sand-and-bone/).
> **The final journey starts with a single step...**
>
> Now a father, Rutejìmo is finally comfortable with his place in society as a tender of the dead. The rest of his clan, however, hasn't fully accepted his role and his son questions his bravery after a vicious attack. Unable to explain, Rutejìmo attempts to demonstrate his duties through actions instead of words but fails.
>
> Everything changes after a violent bloodbath with enemies disguised as friends. Rutejìmo begins to lose all that is sacred to him. It's up to him to find his way back to his family and his solace, running for his life, his redemption, and his honor. Can Rutejìmo battle his biggest enemy, himself, before it's too late and his legacy is destroyed once and for all?
# Trigger and Contents Warnings
Some scenes and themes that appear in this book: death of named characters, death of a named child, death of animals both named and unnamed, graphical violence, personal tragedy, physical abuse, and torture. There is sex but no explicit scenes. There is no rape.
# Support
This novel is released for free. If you like it, consider supporting me by reviews or subscribing as a patron:
* [Patreon](https://patreon.com/dmoonfire)
* [Liberapay](https://liberapay.com/dmoonfire)
* [PayPal](https://paypal.me/dmoonfire)
* [Ko-Fi](https://ko-fi.com/dmoonfire)
* [Typewriter Press](https://store.typewriter.press/) (my store)
# Versioning
The current version is **1.1.0**. This book follows [semantic versioning](https://semver.org/) and there is a [detailed list of changes](versions.markdown).
# License
This book is distributed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license. More info can be found at [https://creativecommons.org/licenses/by-nc-sa/4.0/](https://creativecommons.org/licenses/by-nc-sa/4.0/).
The preferred attribution for this novel is:
> "[Sand and Bone](https://fedran.com/sand-and-bone/)" by [D. Moonfire](https://d.moonfire.us/) is licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)

View file

@ -1,11 +0,0 @@
---
title: Colophon
---
Each chapter of this book was written and edited using Atom, a Javascript-based editor. The files for the novel were managed in a Git repository on a private GitLab instance. Each chapter was an individual file formatted using Markdown. Information and working notes about the chapters were placed into a YAML header at the top of each chapter.
These individual chapters were combined together using a Typescript-based framework (`mfgames-writing-js`) which produces the EPUB, MOBI, and PDF (via WeasyPrint) versions of the novel. These are built using GitLab's Continuous Integration runners.
The cover was created using Inkscape. The color scheme uses eight colors of a monochromatic scale. These colors are shared among all of the Rutejìmo novels. Likewise, the "100-02" along the spine indicates this is the third published book ("02") with Rutejìmo as the main character ("100").
The font used on the cover and interior is Corda in various weights and styles.

View file

@ -1,36 +0,0 @@
---
title: Credits
---
There are a wide variety of people who were involved with making this book.
### Alpha Readers
* Bill H.
* Ciuin
* Tyree C.
* Cindy M.
* Aimee K.
### Beta Readers
* Chandrakumar M.
* Laura W.
* Marta B.
* Mike K.
### Editors
* Blurb Bitch
* Ronda Swolley
* Shannon Ryan
### Patrons
* Ashish P.
### Family
* Susan
* Eli
* Bruce

View file

@ -1,32 +0,0 @@
---
title: License
---
This book is distributed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license. More info can be found at [https://creativecommons.org/licenses/by-nc-sa/4.0/](https://creativecommons.org/licenses/by-nc-sa/4.0/). This means:
### You are free to:
* Share — copy and redistribute the material in any medium or format
* Adapt — remix, transform, and build upon the material
The licensor cannot revoke these freedoms as long as you follow the license terms.
### Under the following terms:
* Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
* NonCommercial — You may not use the material for commercial purposes.
* ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
### Preferred Attribution
The preferred attribution for this novel is:
> "Sand and Bone" by D. Moonfire is licensed under CC BY-NC-SA 4.0
In the above attribution, use the following links:
* Sand and Bone: [https://fedran.com/sand-and-bone/](https://fedran.com/sand-and-bone/)
* D. Moonfire: https://d.moonfire.us/
* CC BY-NC-SA 4.0: https://creativecommons.org/licenses/by-nc-sa/4.0/

View file

@ -1,20 +0,0 @@
---
title: Patrons
---
This book is freely available on the Fedran website. It can be reformatted for any device, shared, and even reposted on other websites (with attribution and a link to the original). If someone wants to write a fanfic or create art inspired by the book, they are allowed to do so with relatively few limitations, which are set down by the license described in the previous section.
* [https://fedran.com/sand-and-bone/](https://fedran.com/sand-and-bone/)
It is hard to compete with "free" in this day and age. Releasing a book under a Creative Commons license is one way of doing that, but there are still costs associated with producing the results. There are hundreds of hours put into writing it, hiring editors to go through it, and even hosting it on a website. As economics will tell you, there is no such thing as a free lunch. Most of the time, you pay for a book before reading it. Sometimes you have a sample of a few chapters to give you a hint, other times just a blurb. Here, you get the entire piece. If you like it, please consider supporting my writing.
The cheapest way of helping is simply to talk about the book. Post opinions on social networks, write a review and put it up on Amazon or Goodreads, or give a copy to someone who might like it.
The second way of helping is to donate money. Even a dollar helps. There are quite a few ways of doing this: you can buy a print copy; the tip jar at Broken Typewriter Press; or even consider becoming a patron. Patronage provides advance access to works-in-progress, votes on new stories and titles, and input into the world and my writing. You can read more about patrons at:
* [https://broken.typewriter.press/dmoonfire/](https://broken.typewriter.press/dmoonfire/)
* [https://fedran.com/patrons/](https://fedran.com/patrons/)
I can only hope that if you like it, you'll help me write the next one.
Thank you.

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/14 MTR 17::11
purpose:
- Introduce Rutejìmo
- Introduce Mapábyo
@ -30,6 +32,17 @@ organizations:
topics:
secondary:
- kojinōmi
warnings:
primary:
- Named Character Death
- Violence
- Physical Assault
- Physical Abuse
- Sexual Intimacy
secondary:
- Named Animal Death
- Unnamed Animal Death
- Physical Torture
summary: >
Rutejìmo is playing with Mapábyo and his two children, Kitòpi and Piróma when there is a bird-like screen, someone in the clan was in trouble. As they ponder what is going on, Chimípu leaves the valley at high speed; the two parents protect their children from the warrior's high-speed exist. They run back to the valley entrance to see Bakóki dying in Tejíko's arms. While the others get ready to follow Chimípu, Rutejìmo heads back into the valley because he has other duties dealing with Bakóki.
---

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/14 MTR 17::26
title: Cowardice
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/15 MTR 5::50
title: Exhaustion
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/21 MTR 10::21
purpose:
- More details on children
- The ability to feel sun powers everywhere

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/29 MTR 19::47
purpose:
- Show Rutejìmo's combat skills
- Show Desòchu's combat skills

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/37 MTR 17::39
title: Kosobyo City
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/37 MTR 18::42
title: Broken Silence
locations:
primary:
@ -10,7 +12,7 @@ characters:
- Rutejìmo
secondary:
- Shimusògo
- Dochiryùma # The other kojinōmi
- Dochiryùma (Unnamed) # The other kojinōmi
- Tsupòbi # warriors who gets "killed"
- Shifíku # Little girl
referenced:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/38 MTR 10::38
title: Alone
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/38 MTR 20::76
title: Greatness
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/39 MTR 3::9
title: Westerners
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/39 MTR 15::40
title: Recovering
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/40 MTR 2::25
title: The Offer
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/40 MTR 12::68
title: Voting
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/40 MTR 18::7
title: Presents
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/41 MTR 1::21
title: Banyosiōu
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/41 MTR 4::42
title: A Second Wind
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/41 MTR 10::1
title: Splitting Up
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/41 MTR 11::56
title: Brothers
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/42 MTR 3::39
title: Nightmares
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/42 MTR 17::44
title: An Unexpected Companion
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/43 MTR 16::8
title: The Dying
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1488/8/45 MTR 13::57
title: Old Ways
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/6 MTR 19::71
title: Asylum
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/7 MTR 1::13
title: Declaration of War
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/7 MTR 4::37
title: Sneaking Out
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/7 MTR 10::24
title: A Long Night
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/8 MTR 15::61
title: A Longer Day
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/9 MTR 19::48
title: Smoke and Honor
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/10 MTR 10::66
title: Shimusogo Chimípu
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/11 MTR 5::30
title: Keep Moving
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/13 MTR 19::3
title: Wind's Teeth
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/14 MTR 1::12
title: Limits
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/14 MTR 8::41
title: Pabinkue Mikáryo
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/14 MTR 10::9
title: One Last Time
locations:
primary:

View file

@ -1,4 +1,6 @@
---
when:
start: 1489/1/14 MTR 16::42
title: Shimusogo Valley
locations:
primary:

6
commitlint.config.js Normal file
View file

@ -0,0 +1,6 @@
module.exports = {
extends: ["@commitlint/config-conventional"],
rules: {
"body-max-line-length": [0],
},
};

293
fedran.json Normal file
View file

@ -0,0 +1,293 @@
{
"version": 0,
"identifier": "0100-02",
"character": {
"pov": 100,
"name": "Rutejìmo",
"character_slug": "rutejimo",
"color": "hsl(45, 40%, 50%)"
},
"source": {
"pov": 100,
"volume": 2,
"title": "Sand and Bone",
"description": {
"tag": "The final journey starts with a single step...",
"paragraphs": [
"Now a father, Rutejìmo is finally comfortable with his place in society as a tender of the dead. The rest of his clan, however, hasn't fully accepted his role and his son questions his bravery after a vicious attack. Unable to explain, Rutejìmo attempts to demonstrate his duties through actions instead of words but fails.",
"Everything changes after a violent bloodbath with enemies disguised as friends. Rutejìmo begins to lose all that is sacred to him. It's up to him to find his way back to his family and his solace, running for his life, his redemption, and his honor. Can Rutejìmo battle his biggest enemy, himself, before it's too late and his legacy is destroyed once and for all?"
]
},
"word_count": 82861,
"length": "Novel",
"title_slug": "sand-and-bone",
"identifier_slug": "0100-02-sand-and-bone",
"copyright_year": 2019,
"status": "Stable",
"genres": [
"Action",
"Tragedy"
],
"languages": {
"miwafu": true
},
"has_dedication": true,
"git": {
"http_url": "https://src.mfgames.com/fedran-sources/sand-and-bone.git",
"branch": "master"
},
"links": {
"development": {
"git": "https://src.mfgames.com/fedran-sources/sand-and-bone/",
"issues": "https://src.mfgames.com/fedran-sources/sand-and-bone/issues"
},
"online": {
"wattpad": "https://www.wattpad.com/story/86395803-sand-and-bone",
"goodreads": "https://www.goodreads.com/book/show/35198914-sand-and-bone"
},
"print": {
"isbn": "978-1-940509-25-9",
"amazon": "http://amzn.to/2FsiVRx",
"typewriter": "https://store.typewriter.press/product/sand-and-bone/"
},
"digital": {
"amazon": "http://amzn.to/2FyJRey",
"typewriter": "https://store.typewriter.press/product/sand-and-bone/"
}
},
"cover": {
"cover_slug": "0100-02-sand-and-bone",
"title_page_lines": [
"Sand",
"and",
"Bone"
]
},
"warnings": {
"text": "This novel contains scenes where the primary character and others experience named character death, physical abuse, physical assault, sexual intimacy, and violence. There are also scenes where secondary characters experience named animal death, physical torture, and unnamed animal death. There is no sexual assault.",
"primary": [
"Named Character Death",
"Violence",
"Physical Assault",
"Physical Abuse",
"Sexual Intimacy"
],
"secondary": [
"Named Animal Death",
"Unnamed Animal Death",
"Physical Torture"
]
},
"credits": {
"alpha_readers": [
"Bill H.",
"Ciuin",
"Tyree C.",
"Cindy M.",
"Aimee K."
],
"beta_readers": [
"Chandrakumar M.",
"Laura W.",
"Marta B.",
"Mike K."
],
"editors": [
"Blurb Bitch",
"Ronda Swolley",
"Shannon Ryan"
]
},
"chapters": [
{
"title": "Running Away",
"word_count": 2335,
"summary": "Rutejìmo is playing with Mapábyo and his two children, Kitòpi and Piróma when there is a bird-like screen, someone in the clan was in trouble. As they ponder what is going on, Chimípu leaves the valley at high speed; the two parents protect their children from the warrior's high-speed exist. They run back to the valley entrance to see Bakóki dying in Tejíko's arms. While the others get ready to follow Chimípu, Rutejìmo heads back into the valley because he has other duties dealing with Bakóki.\n",
"warnings": {
"primary": [
"Named Character Death",
"Violence",
"Physical Assault",
"Physical Abuse",
"Sexual Intimacy"
],
"secondary": [
"Named Animal Death",
"Unnamed Animal Death",
"Physical Torture"
]
}
},
{
"title": "Cowardice",
"word_count": 1197,
"summary": "As Rutejìmo dresses for his duties as a kojinōmi, a tender of the dead, Kitòpi comes into his room and asks why his father is a coward. Rutejìmo is already taken on the silence of his duties, so he cannot answer and the guilt tears into him. He is saved by Pidòhu who arrives and tries to explain.\n"
},
{
"title": "Exhaustion",
"word_count": 1372,
"summary": "Rutejìmo is coming back after his day of purification after dealing with Bakóki's death. Chimípu meets up with him and tells him that they saved the other two couriers but lost most of the money the clan needed. They are going to take a job with the Kosòbyo, one of the largest clans in the entire desert.\n"
},
{
"title": "The Morning Before",
"word_count": 1713,
"summary": "The day that Rutejìmo and Mapábyo are leaving for Kosobyo City, their children wake them up, curious and active. They talk about why the two are going instead of Mapábyo's parents. Kiríshi interrupts them to get them going.\n"
},
{
"title": "Halfway There",
"word_count": 1995,
"summary": "Rutejìmo and Nifùni are sparring, but Rutejìmo is using a real weapon. Nifùni gets upset and refuses to fight until he has a real weapon himself. Desòchu insists that Rutejìmo's fighting skill is enough and demostrates by sparing with his brother, then failing to protect his neck. Rutejìmo hurts himself to pull the blow.\n"
},
{
"title": "Kosobyo City",
"word_count": 1048,
"summary": "The group arrives at Kosobyo City. It is far larger and more expansive than Rutejìmo had ever seen before. But, just as he was getting overwhelmed by the scope, he noticed white and gold smoke in the distance indicating his duties as a kojinōmi were needed. He splits from his clan to head there.\n"
},
{
"title": "Broken Silence",
"word_count": 3677,
"summary": "Rutejìmo meets another kojinōmi on the way to the smoke. To his surprise, the other man is heading away as he decided not to help a night clan's death. Rutejìmo, on the other hand, always served everyone and continued forward. He came up to a wagon surrounded by warriors. He walked toward the wagon, usually the crowds parted around him. However, Tsupòbi blocked his way. Rutejìmo found the urge to speak, when he did, he stripped away Tsupòbi's magic and declared him dead to the world. The others left him alone as he attended to a young girl who had been disemboweled and was dying.\n"
},
{
"title": "Alone",
"word_count": 1055,
"summary": "Rutejìmo attends to the little girl's bonfire. As he does, he tries to write the details of the stories she gave him in his book but doesn't have the room. It saddens him that so many stories are lost because no one remembers. When the fire is done, he leaves his belongings behind and begins his purfication ritual.\n"
},
{
"title": "Greatness",
"word_count": 1428,
"summary": "Heading back, Rutejìmo encountered Fidochìma, the little girl's grandfather. Fidochìma is looking for revenge but Rutejìmo suggests he let Mifúno handle it; Fidochìma refuses and they part ways.\n"
},
{
"title": "Westerners",
"word_count": 2386,
"summary": "Rutejìmo arrives at Kosobyo City but is quickly overwhelmed by the size of it. He tries to find the message board but no one helps him until a guard, Dimóryo, offers to help. They talk a little before reaching the board. Desòchu arrives but bristles at Dimóryo's attention. The Shimusògo head back to the hotel.\n"
},
{
"title": "Recovering",
"word_count": 2111,
"summary": "As Rutejìmo, Mapábyo, and Nifùni go shopping, Dimóryo comes up to them with probing questions. Mapábyo doesn't warm up to her. After the guard leaves, Rutejìmo and Mapábyo head back to the inn for some quiet time.\n"
},
{
"title": "The Offer",
"word_count": 2641,
"summary": "Rutejìmo is out in Kosobyo City looking for Nifùni who disappeared. He stumbled on Nifùni making a deal with a woman to deliver a message who offers a hundred thousand pyābi to deliver a message. Nifùni almost accepts but Rutejìmo has a bad feeling and tuns it down. Nifùni gets upset and attacked Rutejìmo before they are both kicked out of a bar. Desòchu arrives and insists on taling about it. When Nifùni suggests that Desòchu would always take Rutejìmo's side, Desòchu punches him.\n"
},
{
"title": "Voting",
"word_count": 1794,
"summary": "All of the Shimusògo are sharing a room in the inn. They vote on taking the woman's job. After a tense decision, they decide not to take the job. Nifùni is upset by the result.\n"
},
{
"title": "Presents",
"word_count": 5886,
"summary": "Rutejìmo and Mapábyo are finishing their last shopping when Byochína comes up. Nifùni had gone missing. They search for him but find the corpse of the Kosòbyo woman instead. Soon after that, they find Nifùni who accepted the contract. Dimóryo and other guards show up and try to kill all of them. Mapábyo calls Chimípu and Desòchu who destroy large parts of the city as the runners escape the city.\n"
},
{
"title": "Banyosiōu",
"word_count": 1336,
"summary": "After the Shimusògo escaped the city, Desòchu attacked Nifùni for betraying them. Rutejìmo watching uncomfortablly until he feels an overwhelming urge to speak up, not as one of the Shimusògo but as Mifúno, the desert itself.\n"
},
{
"title": "A Second Wind",
"word_count": 2116,
"summary": "The Shimusògo try to figure out what to do next. They open the case and find out that the Kosòbyo is going to leave Tachìra and possibly set off a bloody war, but they aren't sure. If they are wrong, then the Kosòbyo will destroy their clan. They decide to send the vote for the entire clan and send Chimípu ahead to make the choice.\n"
},
{
"title": "Splitting Up",
"word_count": 3144,
"summary": "While the Shimusògo slept, Kosòbyo's forces spread out across the land. Their plans of having Chimípu go first was changed when they realized they all had to run. Breaking apart the message into multiple parts, Desòchu plans a unique route for each one. As they do, Fidochìma appears and begs for forgiveness, the desert had already turned her back on him and he had become a banyosiōu.\n"
},
{
"title": "Brothers",
"word_count": 2877,
"summary": "As the Shimusògo break up, Rutejìmo is held behind with Desòchu. His brother tells him that he isn't going ahead. Instead he was going to stall the warriors chasing after them even though he knew he was going to die. After a tearful goodbye, Rutejìmo flees as Desòchu and Fidochìma cover his retreat.\n"
},
{
"title": "Nightmares",
"word_count": 1391,
"summary": "Camping alone, Rutejìmo is haunted by his brother's death and the possibility of losing everyone else in his life.\n"
},
{
"title": "An Unexpected Companion",
"word_count": 2020,
"summary": "Rutejìmo struggles to run alone. Then his path meets up with Nifùni right before night. Together, they find shelter though tensions rise as they begin to talk.\n"
},
{
"title": "The Dying",
"word_count": 1907,
"summary": "Rutejìmo and Nifùni come up to a oasis run by the Nyochikōmu. They have a chance to recover but then Rutejìmo sees smoke which means his duties as a kojinōmi are needed. Nifùni argues and then goes off alone. The old lady tending the oasis offers to keep his things safe, because he is a kojinōmi.\n"
},
{
"title": "Old Ways",
"word_count": 2429,
"summary": "Rutejìmo wakes up back to the spring. Atefómu took care of him. She also tells him that Kosòbyo warriors came and she guided them to Nifùni who they killed. When Rutejìmo gets upset, she offers to let him kill her but he doesn't. They also talk about how being a kojinōmi also means he's the desert's champion, doomed to die like most warriors.\n"
},
{
"title": "Asylum",
"word_count": 4843,
"summary": "Rutejìmo makes it to Wamifuko City but he is being chased. Allies of Kosòbyo try to stop him but Gichyòbi defends him, killing almost everyone who attacked Rutejìmo.\n"
},
{
"title": "Declaration of War",
"word_count": 5145,
"summary": "Rutejìmo tells Gichyòbi what was going on, though relucantly at first. Then Gichyòbi tells him that Hyonèku and Kiríshi were attacked on their rute. Kiríshi died but Hyonèku was severely injured. Rutejìmo rushes for his wife's daughter and tells him everything, ending with three clans declaring war on Kosòbyo. Then Rutejìmo says he is going to burn Kiríshi's body, which gets everyone upset until he invokes Mifúno's name.\n"
},
{
"title": "Sneaking Out",
"word_count": 1351,
"summary": "Rutejìmo and Gichyòbi sneak out of the city so Rutejìmo can burn Kidóri's corpse.\n"
},
{
"title": "A Long Night",
"word_count": 2456,
"summary": "Rutejìmo finishes burning Kiríshi's body. Instead of resting, he packs up, leaves his *Book of Ash*, and then immediately starts running toward home.\n"
},
{
"title": "A Longer Day",
"word_count": 1071,
"summary": "Rutejìmo is getting exhausted running but he doesn't dare stop in fears of being ambushed.\n"
},
{
"title": "Smoke and Honor",
"word_count": 5809,
"summary": "Rutejìmo answers a call for a kojinōmi only to find out it is a trap. He calls for help and four clans answer the call, all of them dying in the ambush. Then Chimípu arrives and joins the fight.\n"
},
{
"title": "Shimusogo Chimípu",
"word_count": 1072,
"summary": "Rutejìmo wakes up to a field of carnage and Chimípu dying. She tells him to run home. He doesn't want to but she shoves him away as she dies.\n"
},
{
"title": "Keep Moving",
"word_count": 254,
"summary": "Rutejìmo runs alone, haunted by the deaths of everyone who lost their lives.\n"
},
{
"title": "Wind's Teeth",
"word_count": 2862,
"summary": "Rutejìmo arrives at Three Falls Teeth. Mapábyo is there and he is relived but it turns out that Dimóryo had taken his wife's form. He calls on the desert to kill the Kosòbyo but Dimóryo manages to poison him before she is killed by the desert.\n"
},
{
"title": "Limits",
"word_count": 1117,
"summary": "Running out of time and with poison in his veins, Rutejìmo tries to run as long as he can. Even when his power runs out, he keeps running until the poison saps his strength and he collapses. Mikáryo finds him.\n"
},
{
"title": "Pabinkue Mikáryo",
"word_count": 2834,
"summary": "Rutejìmo doesn't expect to wake up but he does. He finds out that Mikáryo is using magic from her horse's blood to keep him alive but he can't sleep. They settle down to a night of talking.\n"
},
{
"title": "One Last Time",
"word_count": 2613,
"summary": "Minutes before Rutejìmo and he managed to survive the night. Mikáryo and Tsubàyo prepare to protect him until the sun rises and he could use his magic, but there is going to be a battle among the Pabinkúe. Rutejìmo knows that if he stops again, he will die so he runs as fast as he can, finally catching the clan's spirit as he begins his ryodifūne, his final run.\n"
},
{
"title": "Shimusogo Valley",
"word_count": 3576,
"summary": "Rutejìmo was the only one to make it home, but he cannot stop without dying. Pidòhu meets him along the way, flying using his magic. Realizing there is a war, they summon help from other clans to protected Rutejìmo as he races to the valley. The Shimusògo slow him down so he can collapse in Tejíko's arms. As the poison and energies kill him, Kitòpi and Piróma approach to see their father dying. Piróma puts on the kojinōmi clothes and tends to his death.\n"
}
]
}
}

58
flake.lock Normal file
View file

@ -0,0 +1,58 @@
{
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1642700792,
"narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "846b2ae0fc4cc943637d3d1def4454213e203cba",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1643805626,
"narHash": "sha256-AXLDVMG+UaAGsGSpOtQHPIKB+IZ0KSd9WS77aanGzgc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "554d2d8aa25b6e583575459c297ec23750adb6cb",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-unstable",
"type": "indirect"
}
},
"nixstable": {
"locked": {
"lastModified": 1622516815,
"narHash": "sha256-ZjBd81a6J3TwtlBr3rHsZspYUwT9OdhDk+a/SgSEf7I=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7e9b0dff974c89e070da1ad85713ff3c20b0ca97",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "21.05",
"type": "indirect"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"nixstable": "nixstable"
}
}
},
"root": "root",
"version": 7
}

28
flake.nix Normal file
View file

@ -0,0 +1,28 @@
{
inputs = {
nixstable.url = "nixpkgs/21.05";
nixpkgs.url = "nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, nixstable, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
stable = nixstable.legacyPackages.${system};
in {
devShell = pkgs.mkShell {
buildInputs = [
pkgs.epubcheck
pkgs.nixfmt
pkgs.nodejs-16_x
pkgs.pandoc
pkgs.pdftk
pkgs.python39Full
pkgs.python39Packages.weasyprint
pkgs.jq
pkgs.s3cmd
];
};
});
}

View file

@ -1,9 +0,0 @@
---
title: title
---
<div class="title">
<div class="large">Sand</div>
<div class="medium">and</div>
<div class="large">Bone</div>
</div>

View file

@ -1,21 +0,0 @@
---
title: Miwāfu
---
<p>This novel is set in the Mifuno Desert where the native language is Miwāfu. Names in this language are significantly different from English, so here is a short guide on pronunciation and usage.</p>
<p>The biggest difference is that every name is gendered, which is identified by the accent on the penultimate syllable. There are three types of accents:</p>
<ul>
<li><em>Grave</em> (as in hèru for stallion) is a tiny tick that goes down to the right. The grave accent indicates a masculine aspect, either in physical gender, size, or power. Names with grave accents either end in a lower pitch or the entire word is spoken in a lower tone.</li>
<li><em>Macron</em> (for example, hēru for colt) is a bar over the vowel. This is a neuter term, used for many gender-free words or expressions within the language. It is also used for mechanical devices, abstract concepts, and children—both human and beast. Macrons are spoken as a long vowel or drawing out the word just a beat longer than normal.</li>
<li><em>Acute</em> (héru for mare) is a tiny tick that goes to the upper right. The acute indicates feminine aspects of the word. It can represent control without power or precision. These words end on a high note or the entire word is spoken in a higher pitch.</li>
</ul>
<p>The only instances where accents arent used is adjectives or indication of ownership. So, if a valley is owned by the clan Shimusògo, it is known as Shimusogo Valley.</p>
<p>The names themselves are phonetic. A syllable is always from a consonant cluster to the vowel. For examples: Mi.wā.fu (IPA <span class="ipa">/mi.waː.ɸɯ̥/</span>), Shi.mu.sò.go (<span class="ipa">/ɕi.mɯ.ꜜso.ɡo/</span>), and De.sò.chu (<span class="ipa">/de.ꜜso.tɕɯ̥/</span>). The only exception is the letter “n” which is considered part of the syllable before it when not followed by a vowel. For example, ga.n.ré.ko (<span class="ipa">/ɡa.ŋꜛɾe.ko/</span>) and ka.né.ko (<span class="ipa">/ka.ꜛne.ko/</span>).</p>
<p>Miwāfu has no capital letters, they are added to satisfy English conventions.</p>

View file

@ -1 +0,0 @@
<br/>

View file

@ -1,15 +0,0 @@
---
title: Title
---
<div class="title">
<div class="large">Sand</div>
<div class="medium">and</div>
<div class="large">Bone</div>
<div class="author">D. Moonfire</div>
<div class="publisher">
Broken Typewriter Press &#8226; Cedar Rapids
</div>
</div>

BIN
logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 191 KiB

View file

@ -8,7 +8,4 @@ In addition to having a borderline unhealthy obsession with the written word, he
He lives near Cedar Rapids, Iowa with his wife, numerous pet computers, and a pair of highly mobile things of the male variety.
You can see more work by D. Moonfire at his website. His stories and novels can be found on the Fedran website.
* [https://d.moonfire.us/](https://d.moonfire.us/)
* [https://fedran.com/](https://fedran.com/)
You can see more work by D. Moonfire at his website at [https://d.moonfire.us/](https://d.moonfire.us/). His fantasy world, Fedran, can be found at [https://fedran.com/](https://fedran.com/).

21
matter/credits.md Normal file
View file

@ -0,0 +1,21 @@
---
title: Credits
---
## Alpha Readers
| ---------- | --------- | ----------
| Bill H. | Ciuin | Tyree C. |
| Cindy M. | Aimee K. ||
## Editors
| ---------- | --------- | ----------
| Blurb Bitch | Ronda Swolley | Shannon Ryan |
## Beta Readers
| ---------- | --------- | ----------
| Chandrakumar M. | Laura W. | Marta B. |
| Mike K. |||

View file

@ -2,7 +2,7 @@
title: Legal
---
Copyright © 2016 D. Moonfire\
Copyright © 2019 D. Moonfire\
Some Rights Reserved\
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
@ -10,7 +10,7 @@ Cover art by D. Moonfire
All characters, events, and locations are fictitious. Any resemblance to persons, past, present, and future is coincidental and highly unlikely.
Some scenes and themes that appear in this book: death of named characters, death of a named child, death of animals both named and unnamed, graphical violence, personal tragedy, physical abuse, and torture. There is sex but no explicit scenes. There is no rape.
This novel contains scenes where the primary character and others experience named character death, physical abuse, physical assault, sexual intimacy, and violence. There are also scenes where secondary characters experience named animal death, physical torture, and unnamed animal death. There is no sexual assault.
Broken Typewriter Press\
5001 1st Ave SE\
@ -20,8 +20,8 @@ Cedar Rapids, IA 52402
Broken Typewriter Press\
[https://broken.typewriter.press/](https://broken.typewriter.press/)
{% if edition.isbn %}
ISBN {{ edition.isbn }}
{% if (edition.isbn) %}
ISBN {{edition.isbn}}
{% endif %}
Version {{ edition.version }}
Version {{edition.version}}

32
matter/license.md Normal file
View file

@ -0,0 +1,32 @@
---
title: License
---
This book is distributed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license. More info can be found at [https://creativecommons.org/licenses/by-nc-sa/4.0/](https://creativecommons.org/licenses/by-nc-sa/4.0/). This means:
### You are free to:
- Share — copy and redistribute the material in any medium or format
- Adapt — remix, transform, and build upon the material
The licensor cannot revoke these freedoms as long as you follow the license terms.
### Under the following terms:
- Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
- NonCommercial — You may not use the material for commercial purposes.
- ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
### Preferred Attribution
The preferred attribution for this novel is:
> "Sand and Bone" by D. Moonfire is licensed under CC BY-NC-SA 4.0
In the above attribution, use the following links:
- Flight of the Scions: [https://fedran.com/sand-and-bone/](https://fedran.com/sand-and-bone/)
- D. Moonfire: https://d.moonfire.us/
- CC BY-NC-SA 4.0: https://creativecommons.org/licenses/by-nc-sa/4.0/

61
matter/miwafu.html Normal file
View file

@ -0,0 +1,61 @@
---
title: Miwāfu
---
<p>
This novel has characters who come from the Mifuno Desert where the native
language is Miwāfu. Names in this language are significantly different from
English, so here is a short guide on pronunciation and usage.
</p>
<p>
The biggest difference is that every name is gendered, which is identified
by the accent on the penultimate syllable. There are three types of accents:
</p>
<ul>
<li>
<em>Grave</em> (as in hèru for stallion) is a tiny tick that goes down
to the right. The grave accent indicates a masculine aspect, either in
physical gender, size, or power. Names with grave accents either end in
a lower pitch or the entire word is spoken in a lower tone.
</li>
<li>
<em>Macron</em> (for example, hēru for colt) is a bar over the vowel.
This is a neuter term, used for many gender-free words or expressions
within the language. It is also used for mechanical devices, abstract
concepts, and children—both human and beast. Macrons are spoken as a
long vowel or drawing out the word just a beat longer than normal.
</li>
<li>
<em>Acute</em> (héru for mare) is a tiny tick that goes to the upper
right. The acute indicates feminine aspects of the word. It can
represent control without power or precision. These words end on a high
note or the entire word is spoken in a higher pitch.
</li>
</ul>
<p>
The only instances where accents arent used is adjectives or indication of
ownership. So, if a valley is owned by the clan Shimusògo, it is known as
Shimusogo Valley.
</p>
<p>
The names themselves are phonetic. A syllable is always from a consonant
cluster to the vowel. For examples: Mi.wā.fu (IPA
<span class="ipa">/mi.waː.ɸɯ̥/</span>), Shi.mu.sò.go (<span class="ipa"
>/ɕi.mɯ.ꜜso.ɡo/</span
>), and De.sò.chu (<span class="ipa">/de.ꜜso.tɕɯ̥/</span>). The only
exception is the letter “n” which is considered part of the syllable before
it when not followed by a vowel. For example, ga.n.ré.ko (<span class="ipa"
>/ɡa.ŋꜛɾe.ko/</span
>) and ka.né.ko (<span class="ipa">/ka.ꜛne.ko/</span>).
</p>
<p>
Miwāfu has no capital letters, they are added to satisfy English
conventions.
</p>

1
matter/pad.html Normal file
View file

@ -0,0 +1 @@
<br />

15
matter/title.html Normal file
View file

@ -0,0 +1,15 @@
---
title: Title
---
<div class="title">
<div class="title-area">
<div class="large">Sand</div>
<div class="large">and</div>
<div class="large">Bone</div>
</div>
<div class="author">D. Moonfire</div>
<div class="publisher">Broken Typewriter Press &#8226; Cedar Rapids</div>
</div>

21825
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,27 +1,50 @@
{
"name": "sand-and-bone",
"version": "2.0.3",
"private": true,
"version": "1.1.0",
"description": "A novel by D. Moonfire",
"author": "D. Moonfire",
"description": "\"Sand and Bone\" is a novel by D. Moonfire.",
"author": {
"name": "D. Moonfire"
},
"license": "CC-BY-NC-SA-4.0",
"repository": {
"type": "git",
"url": "git+https://git.mfgames.com/dmoonfire/sand-and-bone.git"
"url": "git+https://src.mfgames.com/fedran-sources/sand-and-bone.git"
},
"homepage": "https://fedran.com/sand-and-bone/",
"scripts": {
"build:epub": "./node_modules/.bin/mfgames-writing-format build epub",
"build:pdf": "./node_modules/.bin/mfgames-writing-format build pdf",
"build": "npm run build:epub && npm run build:pdf"
"build:pdf": "mfgames-writing-format build pdf",
"build:epub": "mfgames-writing-format build epub",
"build:docx": "mfgames-writing-format build docx",
"build": "run-s build:*",
"prepare": "husky install"
},
"dependencies": {
"fedran-hyphen": "^0.2.0",
"fedran-theme": "^1.1.0",
"mfgames-writing-epub": "^1.0.1",
"mfgames-writing-format": "^1.0.1",
"mfgames-writing-hyphen": "^0.4.2",
"mfgames-writing-weasyprint": "^3.0.1",
"url": "^0.11.0"
"@fedran/writing-hyphen": "^1.0.0",
"@fedran/writing-theme": "^4.0.2",
"@mfgames-writing/contracts": "^4.4.0",
"@mfgames-writing/docx-format": "^1.0.2",
"@mfgames-writing/epub2-format": "^2.1.1",
"@mfgames-writing/format": "^3.3.1",
"@mfgames-writing/guillemet": "^1.0.0",
"@mfgames-writing/hyphen-pipeline": "^1.0.2",
"@mfgames-writing/liquid-theme": "^2.1.1",
"@mfgames-writing/weasyprint-format": "^5.0.4",
"markdown-it-multimd-table": "^4.1.3"
},
"devDependencies": {
"@commitlint/cli": "^15.0.0",
"@commitlint/config-conventional": "^15.0.0",
"@saithodev/semantic-release-gitea": "^2.1.0",
"@semantic-release/changelog": "^6.0.1",
"@semantic-release/exec": "^6.0.3",
"@semantic-release/git": "^10.0.1",
"@semantic-release/npm": "^8.0.3",
"@semantic-release/release-notes-generator": "^10.0.3",
"husky": "^7.0.2",
"markdowny": "^0.2.1",
"npm-run-all": "^4.1.5",
"prettier": "^2.0.5",
"semantic-release": "^18.0.1"
}
}

137
publication.json Normal file
View file

@ -0,0 +1,137 @@
{
"metadata": {
"title": "Sand and Bone",
"author": "D. Moonfire",
"language": "en",
"theme": "@fedran/writing-theme",
"outputDirectory": ".",
"outputFilename": "dmoonfire-{{edition.fedran.source.identifier_slug}}-{{edition.version}}.{{edition.ext}}",
"markdown": {
"extensions": [
{
"package": "markdown-it-multimd-table",
"options": {
"headerless": true
}
}
]
},
"style": {
"css": "td { width: 6em; } td[colspan=\"2\"] { width: 12em; }"
}
},
"includes": [
{
"json": "./fedran.json",
"merge": "metadata.fedran"
}
],
"editions": {
"epub": {
"format": "@mfgames-writing/epub2-format",
"ext": "epub"
},
"pdf": {
"format": "@mfgames-writing/weasyprint-format",
"isbn": "",
"images": {
"grayscale": true,
"opaque": true
},
"ext": "pdf"
},
"docx": {
"format": "@mfgames-writing/docx-format",
"ext": "docx"
}
},
"contents": [
{
"element": "cover",
"source": "build/fedran-covers/pov/covers/0100-02-sand-and-bone.jpg",
"linear": false,
"exclude": {
"editions": ["pdf"],
"toc": true
}
},
{
"element": "bastard",
"source": "matter/title.html",
"linear": false,
"exclude": {
"editions": ["epub", "html"],
"toc": true
}
},
{
"element": "title",
"source": "matter/title.html",
"linear": false,
"exclude": {
"toc": true
}
},
{
"element": "legal",
"source": "matter/legal.md",
"liquid": true,
"linear": false
},
{
"element": "dedication",
"source": "matter/dedication.md",
"linear": false
},
{
"element": "toc",
"linear": false,
"title": "Contents",
"exclude": {
"editions": ["pdf"]
}
},
{
"element": "preface",
"source": "matter/miwafu.html",
"linear": false
},
{
"element": "chapter",
"number": 1,
"directory": "chapters",
"source": "/^chapter-\\d+.(markdown|md)$/",
"start": true,
"page": 1,
"pipeline": [
{
"module": "@mfgames-writing/guillemet"
},
{
"module": "@fedran/writing-hyphen"
},
{
"module": "@mfgames-writing/hyphen-pipeline",
"exclude": ["`.*?`", "<code>.*?</code>"]
}
]
},
{
"element": "appendix",
"source": "matter/about.md"
},
{
"element": "appendix",
"source": "matter/fedran.md"
},
{
"element": "appendix",
"source": "matter/credits.md"
},
{
"element": "appendix",
"id": "license",
"source": "matter/license.md"
}
]
}

View file

@ -1,82 +0,0 @@
metadata:
title: Sand and Bone
author: D. Moonfire
language: en
theme: fedran-theme
outputDirectory: .
outputFilename: dmoonfire-100-02-sand-and-bone-{{edition.version}}.{{edition.editionName}}
editions:
epub:
format: mfgames-writing-epub
pdf:
format: mfgames-writing-weasyprint
isbn: 978-1-940509-25-9
images:
grayscale: true
opaque: true
contents:
- element: cover
source: build/repos/fedran-covers/dist/full/0100-02-sand-and-bone-front.jpg
linear: false
exclude:
editions: [pdf]
toc: true
- element: bastard
source: frontmatter/bastard.html
linear: false
exclude:
editions: [epub]
toc: true
- element: title
source: frontmatter/title.html
linear: false
exclude:
toc: true
- element: legal
source: frontmatter/legal.markdown
liquid: true
linear: false
- element: dedication
source: frontmatter/dedication.markdown
linear: false
- element: toc
linear: false
title: Contents
exclude:
editions: [pdf]
- element: preface
source: frontmatter/miwafu.html
linear: false
- element: preface
source: build/previously.markdown
linear: false
- element: blank
source: frontmatter/pad.html
linear: false
exclude:
editions: [epub]
- element: chapter
number: 1
directory: chapters
source: /^chapter-\d+.markdown$/
start: true
page: 1
pipeline: &pipelines
- module: ../../fedran-hyphen/lib/fedran-hyphen
- module: mfgames-writing-hyphen
- element: appendix
source: backmatter/about.markdown
- element: appendix
source: backmatter/fedran.markdown
- element: appendix
id: license
source: backmatter/license.markdown
- element: appendix
source: backmatter/patrons.markdown
- element: appendix
source: backmatter/credits.markdown
pipeline: *pipelines
- element: colophon
source: backmatter/colophon.markdown

39
release.config.js Normal file
View file

@ -0,0 +1,39 @@
module.exports = {
branches: ["main"],
extends: ["@commitlint/config-conventional"],
message:
"chore(release): v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}",
plugins: [
[
"@semantic-release/commit-analyzer",
{
preset: "conventionalcommits",
},
],
"@semantic-release/release-notes-generator",
"@semantic-release/npm",
[
"@semantic-release/exec",
{
prepareCmd: "npm run build",
},
],
"@semantic-release/changelog",
"@semantic-release/git",
[
"@saithodev/semantic-release-gitea",
{
giteaUrl: "https://src.mfgames.com",
assets: [
{ path: "*.epub", label: "EPUB2", type: "other" },
{ path: "*.pdf", label: "PDF", type: "other" },
{ path: "*.docx", label: "DOCX", type: "other" },
],
},
],
],
};

23
scripts/build.sh Executable file
View file

@ -0,0 +1,23 @@
#!/usr/bin/env bash
# Set up logging.
log() { echo "🛠️ $(basename $0): $@"; }
# Move into the root folder.
cd $(dirname $(dirname $0))
# Make sure everything is set up.
log "setting up project"
./scripts/setup.sh || exit 1
# Clean up the old files.
log "cleaning old builds"
rm -f dmoonfire*
# Build the project outputs.
log "building PDF"
./node_modules/.bin/mfgames-writing-format build pdf || exit 1
log "building EPUB"
./node_modules/.bin/mfgames-writing-format build epub || exit 1
epubcheck dmoonfire*.epub || exit 1

27
scripts/check-env-bucket.sh Executable file
View file

@ -0,0 +1,27 @@
#!/usr/bin/env bash
# Checks the environment to see if we have all the requisite components needed
# to upload or download from the S3 bucket.
# Set up logging.
log() { echo "⚗️ $(basename $0): $@"; }
# Move into the root folder.
cd $(dirname $(dirname $0))
for i in S3_ACCESS_KEY_ID S3_SECRET_ACCESS_KEY S3_ENDPOINT S3_BUCKET
do
if [ "x${!i}" = "x" ]
then
log "missing environment variable $i"
exit 1
fi
done
if [ ! which s3cmd 2> /dev/null ]
then
log "cannot find 's3cmd' to execute"
exit 1
fi
exit 0

40
scripts/release.sh Executable file
View file

@ -0,0 +1,40 @@
#!/usr/bin/env bash
# Builds the final versions of the book and then upload the results to various
# locations.
# Set up logging.
log() { echo "️🚢 $(basename $0): $@"; }
# Move into the root folder.
cd $(dirname $(dirname $0))
# Perform the basic environment checks and setup.
./scripts/setup.sh || exit 1
./scripts/check-env-bucket.sh || exit 1
# Clean up old versions of the file.
log "cleaning up prior versions which may not match versions"
rm -f dmoonfire*
# Perform the release process.
log "performing semantic release"
export GIT_CREDENTIALS="dmoonfire:$GITEA_TOKEN"
npx semantic-release || exit 1
# Create a tarball of the output files and upload them to S3.
if ls dmoonfire* &> /dev/null
then
log "packaging output into a tarball"
tar -cjf sand-and-bone.tar.bz2 dmoonfire*
log "uploading tarball to bucket"
export AWS_ACCESS_KEY_ID=$S3_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$S3_SECRET_ACCESS_KEY
export AWS_ENDPOINT=$S3_ENDPOINT
export AWS_BUCKET=$S3_BUCKET
s3cmd --access_key=$S3_ACCESS_KEY_ID --access_token=$S3_SECRET_ACCESS_KEY --host=$S3_ENDPOINT --host-bucket=$S3_ENDPOINT -P put sand-and-bone.tar.bz2 s3://$S3_BUCKET || exit 1
else
log "no files to upload"
fi

31
scripts/setup-fedran-covers.sh Executable file
View file

@ -0,0 +1,31 @@
#!/usr/bin/env bash
# Download the Fedran covers for inclusion. This places everything into the
# ./build/fedran-covers folder.
# Set up logging.
log() { echo "🖼 $(basename $0): $@"; }
# Move into the root folder.
cd $(dirname $(dirname $0))
# Check to see if it is already downloaded.
if [ -d ./build/fedran-covers ]
then
log "fedran-covers already exists, not downloading"
else
# Make sure we have all the required environment variables.
log "fedran-covers is missing, download from bucket"
./scripts/check-env-bucket.sh || exit 1
# Set the variables.
export AWS_ACCESS_KEY_ID=$S3_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$S3_SECRET_ACCESS_KEY
export AWS_ENDPOINT=$S3_ENDPOINT
export AWS_BUCKET=$S3_BUCKET
# Download and extract the bucket.
mkdir -p ./build/fedran-covers
s3cmd --access_key=$S3_ACCESS_KEY_ID --access_token=$S3_SECRET_ACCESS_KEY --host=$S3_ENDPOINT --host-bucket=$S3_ENDPOINT -P get s3://$S3_BUCKET/fedran-covers.tar.bz2 ./build/fedran-covers/fedran-covers.tar.bz2 || exit 1
tar x -C build/fedran-covers -f build/fedran-covers/fedran-covers.tar.bz2
fi

24
scripts/setup-fonts.sh Executable file
View file

@ -0,0 +1,24 @@
#!/usr/bin/env bash
# Sets up the fonts for building the PDF output. It doesn't do it if we are not
# in a CI environment.
# Set up logging.
log() { echo "✒️ $(basename $0): $@"; }
# Move into the root directory.
cd $(dirname $(dirname $0))
# We only insert the fonts if we are on a CI server.
if [ "x$CI" == "x" ]
then
log "not in CI environment, not installing fonts"
else
log "installing fonts"
mkdir -p ~/.local/share/fonts
cp $(nix-build --no-out-link '<nixpkgs>' -A source-serif-pro)/share/fonts/opentype/*.otf ~/.local/share/fonts
cp $(nix-build --no-out-link '<nixpkgs>' -A source-sans-pro)/share/fonts/opentype/*.otf ~/.local/share/fonts
log "updating font caches"
fc-cache
fi

17
scripts/setup-node.sh Executable file
View file

@ -0,0 +1,17 @@
#!/usr/bin/env bash
# Installs the required Node packages
# Set up logging.
log() { echo "📦️ $(basename $0): $@"; }
# Move into the root directory.
cd $(dirname $(dirname $0))
if [ -d ./node_modules ]
then
log "node_modules already exists"
else
log "setting up node"
npm install --ci
fi

9
scripts/setup.sh Executable file
View file

@ -0,0 +1,9 @@
#!/usr/bin/env bash
# Move into the root folder.
cd $(dirname $(dirname $0))
# Run the setup commands.
./scripts/setup-fonts.sh || exit 1
./scripts/setup-fedran-covers.sh || exit 1
./scripts/setup-node.sh || exit 1

View file

@ -1,13 +0,0 @@
---
Title: Versions
---
The current version is 1.0.1.
* 1.0.0
* Initial version.
* Print version was published with Ingram with ISBN 978-1-940509-25-9.
* 1.0.1
* Chapter 29:
* "a warrior for some great dead" fixed "dead" to "deed".
* 1.1.0